火花 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 继续挂起的主要内容,如果未能解决你的问题,请参考以下文章