【发布时间】:2015-11-28 05:10:03
【问题描述】:
我有一个使用 Spark 1.3.1、Amazon S3 和 EMR 3.8 的 ETL 应用程序。 我需要我的应用程序将 Dataframe 保存在多个分区中。
根据 Spark 1.3.1 文档,这是对 parquet 文件进行分区的方法:
df1.save("data/test_table/key=1", "parquet")
但问题是我的RDD有很多数据,需要保存在单独的分区上。 (分组)
我找不到让这个程序快速运行(或不那么慢)的正确逻辑
一些尝试:
#Get All RDD Partition's
AllPartitions = RDD.map(lambda x: x[0]).distinct()
#For all partitions save filtering
for part in AllPartitions.collect():
filteredDF = df.filter(df.recordOpeningDate == part)
df.save(path=outputFilePath + "/FIELD=" + part, source='parquet',mode='append')
尝试使用 GroupBy
def Mapping(line):
return (
line[0] , [
#Definition of my RDD
])
def SavePartitions(KV):
#WRONG ! I cant create a DF inside a transformation
df = sqlContext.createDataFrame(KV, SCHEMA)
df.save(...)
RDD = RDD.map(Mapping).groupByKey().mapValues(SavePartitions)
【问题讨论】:
标签: python amazon-s3 apache-spark emr parquet