apache-spark - Spark JDBC partitionColumns 是否应该被识别为 DataFrame 分区?
问题描述
我使用partitionColumn
选项来读取 3 亿行表,希望能够为我的 ETL 作业(在 Spark 3.0.1 中)实现低内存/磁盘要求。
但是,解释计划显示在开头/叶子:
+- Exchange hashpartitioning[partitionCol#1, 200), true, [id=#201]
+- *(1) Scan JDBCRelation(table)[numPartitions=200] (partitionCol#1, time#2)...
我原以为这里不需要改组,因为partitionCol
在 JDBC 选项中指定了。
完整计划中有很多事情要做,但每个窗口操作都先按列分区partitionCol
,然后按其他列分区。
我试过了:
- 确保我的列被声明为非空(因为我看到
Sort[partitionCol#1 ASC NULLS FIRST...]
被注入并认为这可能是一个问题) - 检查数据帧分区:
jdbcDF.rdd.partitioner
是None
(这似乎证实了它不被理解)
如何加入两个 JDBC 表并避免 Exchange?导致Datasource v2 分区报告接口(在 2.3.1 中修复),但也许这不会扩展到 jdbc 加载?
解决方案
推荐阅读
- java - 最新版 Android Studio 中文本视图的文本对齐选项在哪里?
- apache - 安装后apache上的语法错误让加密
- frameworks - 机器人框架-如何用包含文件列表的 .csv 文件替换“目录中的列表文件”关键字
- html - HTML 列表样式
- swift - How can I get the contents of the text box below and display the retrieved text on the label when I press the button?
- swift - 视图控制器之间的 Swift 通信
- getstream-io - 使用 GetStream,如何在删除目标时删除所有“评论”和“喜欢”活动?
- android - 我在 Android Studio 上找不到我的调试窗口
- angular - HttpClient Angular CORS Twilio
- java - 根据 OIM 中的自定义属性值搜索用户