无法比较Spark SQL Date列



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

我创建了2个类型为TestDate的RDD

我想在loginTime列的值相等的两个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)")

我没有得到任何异常。但是我也没有得到正确的答案。它做了一个笛卡尔坐标,并在结果中生成了一些随机日期。

问题是由于创建日期对象时给出的格式错误。当格式被修正后,它工作得很好。

您可以尝试使用另一种方法:

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

如果不行,你可以尝试将日期转换为string:

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

相关内容

  • 没有找到相关文章

最新更新