2016-09-13 11 views
0

を比較することができません(ID:文字列、loginTime:java.sql.Date)私はScalaの ケースクラスTestDateケースクラスを持っているSparkSQL日付列に

私は私が欲しかったタイプTestDate

の2つのRDD年代を作成loginTimeカラムの値が等しい2つのrddの内部結合を行う。下記のコードスニペットをご覧ください。

firstRDD.toDF.registerTempTable("firstTable") 
secondRDD.toDF.registerTempTable("secondTable") 

val res = sqlContext.sql("select * from firstTable INNER JOIN secondTable on to_date(firstTable.loginTime) = to_date(secondTable.loginTime)") 

私は例外がありません。でも、私は正解も出ていません。 デカルトを行い、結果にランダムな日付がいくつか生成されます。

答えて

0

あなたは別のアプローチを使用して試すことができます:

val df1 = firstRDD.toDF 
val df2 = secondRDD.toDF 

val res = df1.join(df2, Seq("loginTime")) 

それが動作しない場合は、文字列にあなたの日付をキャストしてみてください:

val df1 = firstRDD.toDF.withColumn("loginTimeStr", col("loginTime").cast("string")) 
val df2 = secondRDD.toDF.withColumn("loginTimeStr", col("loginTime").cast("string")) 

val res = df1.join(df2, Seq("loginTimeStr")) 

は最後に、多分問題は、あなたにもあります結合のID列が必要ですか?

1

問題は、日付オブジェクトの作成時に間違ったフォーマットが原因で発生しました。フォーマットが修正されたとき、それはうまくいった。

関連する問題