【问题标题】:Spark 1.3.1 - Parquet - Discovery Multiple Partitions on SaveSpark 1.3.1 - Parquet - 保存时发现多个分区
【发布时间】:2015-11-28 05:10:03
【问题描述】:

我有一个使用 Spark 1.3.1、Amazon S3 和 EMR 3.8 的 ETL 应用程序。 我需要我的应用程序将 Dataframe 保存在多个分区中。

根据 Spark 1.3.1 文档,这是对 parquet 文件进行分区的方法:

Partition Discovery

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


    【解决方案1】:

    也许我误解了您的问题,但如果您有dataframe,您可以致电repartition 将您的数据拆分为所需数量的分区,例如10:

    myDataFrame.repartition(10).saveAsParquet("/path/to/output/")
    

    这将导致您的数据存储在 /path/to/output/ 下的 10 个不同文件中。

    【讨论】:

    • 我的解决方案是更新我的 EMR 4.0 集群(使用 Spark 1.4.1)并使用方法 pyspark.sql.DataFrameWriter.save。
    【解决方案2】:

    有关信息,

    我的解决方案是更新我的 EMR 4.0 集群(使用 Spark 1.4.1)并使用方法 pyspark.sql.DataFrameWriter.save。

    【讨论】:

      猜你喜欢
      • 2023-03-20
      • 1970-01-01
      • 2017-03-28
      • 2019-07-29
      • 2015-07-09
      • 2019-03-02
      • 2015-01-27
      • 2017-03-29
      • 2017-12-02
      相关资源
      最近更新 更多