apache-spark - 使用 DataFrame.foreachPartition,将分区处理为数据帧
问题描述
col0
我有一个由;分区的数据框 DF 中的每个值有很多行col0
。我有一个数据库,我想使用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
})
有任何想法吗?
解决方案
我无法找到一个优雅的解决方案,但我能够找到一个不优雅的解决方案。
当您写入文件系统时,Spark 将为每个分区写入一个单独的文件。然后,您可以使用文件系统列出文件,然后将每个文件作为单独的数据帧单独读取和操作。
推荐阅读
- postgresql - Nifi:如何使用 NiFi 将 CSV 内容及其元数据移动到 Postgresdatabase 中的单个表
- machine-learning - 为什么基于(或作为函数)其年龄和体重来预测鲑鱼的长度是一个回归问题?
- python - 通过 Python 使用 Selenium 进行多处理时,Chrome 在几个小时后崩溃
- django - 网站上线数字海洋后如何编辑内容?
- swift - Swift 可编码 - 如何获取位于层次结构中较高位置的结构的属性值?
- ffmpeg - 如何将包含 B 帧且没有 DTS 的视频流写入 MP4 容器?
- qt - gdb 在调试 qmake 时终止
- java - 如何将 spock @SpringSpy 与 JpaRepository 一起使用
- jquery - 如何在 JQuery Datepicker 中阻止上一年?
- python - 如果找不到 Django REST Framework 的详细信息,如何修改 ModelViewSet 类中的错误响应?