2017-09-13 5 views
1

df1df2という名前のDataFrameオブジェクトがあり、df1ではなくdf2にある行を見つけようとしています。このエラーはデータフレームがない場合に発生(またはされるように使用)できるようです周りの検索からスパーク:データフレーム「例外」メソッドがエラーを発生させる:「未解決の演算子: '例外」;

Exception in thread "main" org.apache.spark.sql.AnalysisException: unresolved operator 'Except; 

except方法は私が必要なものだけのように思えるが、私はそれを呼び出すときに、私はエラーを取得します同じ構造を持っていますが、私は彼らのテキスト表現を印刷するとき、彼らは同じに見える:

[user_id: int, doc_days: map<int,smallint>, updated_at: string] 

私は予想通り、手動と同様の構造を持つデータフレーム、およびexcept作品を作成し、REPLで実験しましたそれら。

exceptが私の「本当の」データで機能しないのはなぜですか?

+0

スパークのincorectバージョンのようなサウンド –

答えて

0

だから、その原因はmapです。私は、このデータから地図を省略した場合except方法は正常に動作し、私はの配列を並列化しようとした場合、コードはコンパイルさえしません

val df = spark.parallelize(Seq((1, Map(1 -> 2.toShort), "foo"))) 

:私はparallelize方法、例えばを使用して、私のデータフレームを作成していました地図。

私は最終的に別のアプローチを示唆しているthis answerが見つかりました:

val schema = StructType(
    Seq(
    StructField("user_id", IntegerType), 
    StructField("doc_days", MapType(IntegerType, ShortType)), 
    StructField("updated_at", StringType) 
) 
) 

val df = sqlContext.createDataFrame(sparkContext.makeRDD(data), schema) 
data

...を上方からSeqあります。

このようにすると、すべてexceptが期待どおりに機能します。

関連する問題