我正在将一个(5gb压缩文件)加载到内存(aws)中,创建一个数据帧(在spark中)并尝试根据2个列值将其拆分为更小的数据帧。最终我想将所有这些子集写入各自的文件中。
我刚刚开始尝试使用spark并熟悉数据结构。我试图遵循的方法是这样的。
遍历此列表 - 通过使用列表中的值进行过滤来创建较小的数据帧 - 写入文件
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会根据输出并行启动。有什么建议吗?
答案 0 :(得分:2)
如果可以将子集嵌套在目录层次结构中,那么您应该考虑使用spark的内置分区:
df.write.partitionBy("device_type","partner_pos")
.json("/path/to/root/output/dir")