我使用pyspark 2.0,hadoop 2.7.2.
这是我的代码:
def func(df):
new_df = pd.DataFrame(df['id'])
new_df['num'] = new_df['num'] * 12
return new_df
set = sqlContext.read.parquet("data_set.parquet")
columns = set.columns
map_res = set.rdd.mapPartitions(lambda iter_: func(pd.DataFrame(list(iter_),
columns=columns)))
现在,我需要将map_res RDD保存为实木复合地板文件new.parquet.
我有什么办法可以在保存之前不创建大数据框的情况下进行操作?还是有可能分别保存RDD的每个分区,然后合并所有保存的文件?
P.s.由于它的尺寸很大,我想在不创建数据框的情况下进行管理.
解决方法:
只有两种方法可以做到这一点:
一种是使用“ coalesce(1)”
这将确保将所有数据保存到1个文件中,而不是多个文件(200是默认的分区编号)使用dataframe.write.save(“ / this / is / path”).
另一个选项是将输出写入配置单元表,然后使用配置单元-e“ select * from table”> data.tsv,将以制表符分隔.