我有一个被col0
分区的数据框;每个col0
值在DF中有很多行。我有一个数据库,我想使用每个分区中的col0
的值从中提取数据,但是我一生都无法弄清楚如何使用foreachPartition
,因为它返回Iterator[Row]
。
这是我想做的事情的伪代码:
var df = spark.read.parquet(...).repartition(numPartitions, "col0")
df.foreachPartition((part_df : DataFrame) => {
val values = part_df.select("col0").distinct
val sql = "select * from table0 where col0 in (${values})" // or some smarter method :)
val db_df = spark.read.jdbc(..., table = sql)
part_df.join(db_dv, "col0") // and/or whatever else
})
有什么想法吗?
答案 0 :(得分:0)
我无法找到一种优雅的解决方案,但是却找到了一个优雅的解决方案。
写出文件系统时,Spark将为每个分区写一个单独的文件。然后,您可以使用文件系统列出文件,然后分别作为一个单独的数据帧读取和操作每个文件。