我使用pyspark2.0和hadoop2.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\u res rdd保存为parquet文件new.parquet。有没有办法在保存之前不创建一个大的Dataframe?或者是否有可能单独保存rdd的每个分区,然后合并所有保存的文件?
p、 我想在不创建Dataframe的情况下进行管理,因为它确实很大。
4条答案
按热度按时间xmjla07d1#
我建议:
如果您有少量的分区(2-100个),那么它应该工作得相当快。
vmpqdwk32#
您可以使用:
wgxvkvu93#
只有两种方法可以做到这一点:
一是使用
"coalesce(1)"
这将确保所有数据都保存到一个文件中,而不是使用多个文件(默认分区数为200)dataframe.write.save("/this/is/path")
.另一个选项是将输出写入配置单元表,然后使用
hive -e "select * from table" > data.tsv
将用制表符分隔。4szc88ey4#
要以parquet格式保存文件,您需要将rdd转换为dataframe,因为parquet文件总是需要一个模式进行处理。