无法比较Spark SQL Date列

时间:2016-09-13 11:46:20

标签: scala apache-spark apache-spark-sql

我在scala中有一个case类 case class TestDate(id:String,loginTime:java.sql.Date)

我创建了两个类型为TestDate的RDD&#p>

我想在两个rdd上进行内连接,其中loginTime列的值相等。请在下面找到代码段,

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)")

我没有得到任何例外。但我也没有得到正确答案。 它会生成一个笛卡尔,并在结果中生成一些随机日期。

2 个答案:

答案 0 :(得分:1)

问题是由于在创建日期对象时给出了错误的格式。格式纠正后,工作正常。

答案 1 :(得分: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列吗?

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

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