2016-03-31 1 views
1

OLTP/OLAP処理後に2つのデータセットを受け取っていますが、これらの2つのデータセットには同じフィールドが含まれていますが、同じものをフェッチしている間はスキーマがNullまたはNullではありません。spark SQLのunionAllがハングする

詳細に説明すると、私は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 

また別として、スキーマの1つを変更しています親切に私たちはこの問題を回避する方法を知っているか

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

を試してみてくださいもし私が何か悪いことをしているなら。

〜プラシャント

答えて

0

私は同じことを経験しました。 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?を参照してください。

関連する問題