将庞大的数据帧拆分为较小的数据帧并使用SPARK(python)写入文件

时间:2016-09-01 09:29:37

标签: apache-spark dataframe pyspark apache-spark-sql spark-dataframe

我正在将一个(5gb压缩文件)加载到内存(aws)中,创建一个数据帧(在spark中)并尝试根据2个列值将其拆分为更小的数据帧。最终我想将所有这些子集写入各自的文件中。

我刚刚开始尝试使用spark并熟悉数据结构。我试图遵循的方法是这样的。

  • 阅读文件
  • 按2列排序(仍不熟悉重新分区,不知道是否有帮助)
  • 标识这两列
  • 的所有值的唯一列表
  • 遍历此列表 - 通过使用列表中的值进行过滤来创建较小的数据帧 - 写入文件

     df.sort("DEVICE_TYPE", "PARTNER_POS")
    df.registerTempTable("temp")
    grp_col = sqlContext.sql("SELECT DEVICE_TYPE, PARTNER_POS FROM temp GROUP BY  DEVICE_TYPE, PARTNER_POS")
    print(grp_col)
    

我不相信这是更清洁,更有效的方法。我需要将其写入文件,因为etls会根据输出并行启动。有什么建议吗?

1 个答案:

答案 0 :(得分:2)

如果可以将子集嵌套在目录层次结构中,那么您应该考虑使用spark的内置分区:

df.write.partitionBy("device_type","partner_pos")
  .json("/path/to/root/output/dir")