火花 SQL 中的 unionAll 继续挂起

Posted

技术标签:

【中文标题】火花 SQL 中的 unionAll 继续挂起【英文标题】:unionAll in spark SQL goes on hang 【发布时间】:2016-03-31 04:27:17 【问题描述】:

我在 OLTP/OLAP 处理后收到了两个数据集,虽然这两个数据集包含相同的字段,但在获取相同的字段时,它们的架构不同,例如字段为 Null 或 Not Null。

要详细解释说我有df1和df2。

df1 has field 'a' long with not null
df2 has field 'a' long with null

现在,当我在做 unionAll 时,我将其中一个架构修改为

val x = df1.sqlContext.createDataFrame(df1.rdd, df2.schema)
x.unionAll(df2)
o/p : Job execution goes on hang

又一次尝试

df1.sqlContext.createDataFrame(df1.rdd, df2.schema)
df1.unionAll(df2)
o/p : Here also Job execution goes on hang

如果我做错了什么,请告诉我如何避免这个问题。

~普拉尚特

【问题讨论】:

【参考方案1】:

我也经历过同样的事情。检查 unionAll 前后的分区数。您可以看到这个计数可能有 df1 + df2,因为操作是“连接行”。您可能可以像这样重新分区您的数据:

val partitioner = new HashPartitioner(5) 

sqlContext.createDataFrame(
  df.rdd.map(r => (r.getInt(1), r)).partitionBy(partitioner).values,
  df.schema
)

有关分区的更多信息,请参阅How to define partitioning of DataFrame?。

【讨论】:

以上是关于火花 SQL 中的 unionAll 继续挂起的主要内容,如果未能解决你的问题,请参考以下文章

SQL 2000 UNION ALL 破坏查询优化

如何不排序就执行UNION? (SQL)

Excel:使用 VBA 执行 SQL 过程——允许用户继续工作——不要挂起 Excel 应用程序

如何删除时间戳火花sql中的毫秒数

union和union all的区别

NSURLSessionDownloadTask 在挂起时继续下载