spark SQL中的unionAll挂起



我在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

请告诉我如何避免这个问题,或者我是否做错了什么。

~ Prashant

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

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

请参阅如何定义DataFrame的分区?有关分区的更多信息。

最新更新