【发布时间】:2019-09-20 09:08:45
【问题描述】:
我正在尝试选择 foo 中存在但 bar 中不存在的所有元素。我正在使用此代码:
foo.repartition(1)
foo.cache()
bar.repartition(1)
bar.cache()
foo.select("col_1").except(bar.select("col_1"))
有没有更好或更快的方法来做到这一点?目前在集群上运行时需要超过 15 分钟以上。
附加信息: foo 将有大约 100-1000 个元素。 bar 将有 4000 万多个元素。 foo 是一个数据框,由使用 Spark SQL 从 hive 表(50 列)读取的数据组成。 bar 是一个数据框,由使用 KuduContext 从 kudu 表(250 列)读取的数据组成。
在带有 Scala 2.11.8 的 CDH 5.15.x 上使用 Spark 2.2。
【问题讨论】:
-
好奇:你为什么用
repartition(1)?特别是对于bar(更大的数据框)。您是否尝试省略重新分区?您正在强制 Spark 为这项工作使用单个执行程序,这可能会显着减慢速度 -
我试过两个数据帧都没有
repartition(1)。我在阅读其他一些帖子后添加了它,认为它可能会有所帮助。我对使用 Spark 比较陌生。另外,有没有repartition(1)也没有时差。 -
FWIW,对于
bar,来自 kudu 表的数据帧,表本身在主键(列)上定义了hash partition。col_1是主键列之一。
标签: scala apache-spark dataframe apache-spark-sql