【发布时间】:2017-01-20 11:08:26
【问题描述】:
我有一个具有这种结构的rdd:
[
('Washington',
[
{'age': 15, 'name': 'John', 'extra_info1': 'data'},
{'age': 25 , 'name': 'David', 'extra_info1': 'data'}
]),
('New York',
[
{'age' 50, 'name': 'Mike', 'extra_info2': 'blob'},
{'age' 24, 'name': 'Fred', 'extra_info2': 'blob3'}
])
]
如您所见,我有城市的钥匙,然后是里面的人的听写列表。在所有键中,字典中有一些共享键,例如年龄和姓名,但每个字典也有唯一键。
现在要将其输出到 csv 我迭代 rdd 的每个键,将字典列表转换为 spark.sql.Row 的 rdd 并从 rdd 创建数据框,然后我使用 com.databricks.spark.csv 保存每个数据帧到 hdfs 中的 csv。
我就是这样做的:
for key in rdd.keys().toLocalIterator():
city_rdd = rdd.filter(lambda k: k[0] == key)
city_rdd = city_rdd.map(lambda kv: kv[1]) # return only data without key
city_rdd_rows = city.rdd.map(lambda r: spark.sql.Row(r))
city_df = city_rdd.toDF()
# save the city_df to csv with com.databricks.spark.csv.. i dont have the snippet here
问题是我有很多像华盛顿和纽约这样的元组键,每次保存文件需要 1-2 分钟,而不是并行保存所有 csvs 并节省时间。
我已经阅读了this,但是当我无法使其与 csv 输出一起工作时,当我尝试 json 输出时,我看到 jsons 键只是我的共享键,如“年龄”和“姓名” rdd.
我该怎么办?
【问题讨论】:
标签: apache-spark pyspark pyspark-sql