Spark Scala加入数据帧不能用作select

时间:2017-05-05 15:54:36

标签: scala apache-spark

输入数据包含以下行:

2017043008,21655065096,2017-04-30 08:03:54,56.0,0,2,2017-04-30 08:04:50,21625368946
2017043021,21621452483,2017-04-30 21:43:41,105.0,0,2,2017-04-30 21:45:26,21625672898
2017043018,21629237860,2017-04-30 18:01:28,337.0,0,2,2017-04-30 18:07:05,21628741975

代码是:

val schema = new StructType().add(StructField("call_id", StringType, true)).
add(StructField("o_msisdn", StringType, true)). 
add(StructField("call_start_time", StringType, true)).
add(StructField("duration", FloatType, true)).
add(StructField("o_call_id", StringType, true)).
add(StructField("call_type", StringType, true)). 
add(StructField("call_end_time",StringType, true)). 
add(StructField("s_msisdn", StringType, true))


val callRows = callData.map(line => line.split(",").map(_.trim))
val rdd = callRows.map(row => 
  Row(row(0),row(1),row(2),row(3),row(4),row(5),row(6),row(7)))

val callsDataDF= sqlContext.createDataFrame(rdd, schema)

使用以下内容对上述数据框进行分组:

val groupedCalls = callsDataDF.groupBy($"s_msisdn", $"o_msisdn")
                     .agg(count($"call_id").as("count"))
                     .filter("count >3")

val callsDF = callsDataDF.toDF
val groupedDF = groupedCalls.toDF

加入两个数据帧,以获取具有dataFrame1.col5 == dataFrame2.col6

的行
val res1 = callsDataDF.join(groupedDF, 
                callsDataDF("s_msisdn") === groupedDF("o_msisdn"))

问题是这给出了0行的输出,这是不正确的。

以下代码给出了正确的结果

callsDataDF.registerTempTable("calls")
groupedCalls.registerTempTable("grouped")

sqlContext.sql("""select calls.*, grouped.o_msisdn, grouped.count 
from calls join grouped on calls.s_msisdn=grouped.o_msisdn""").show()

我的问题是为什么sql变量给出了正确的结果,而不是scala join。

0 个答案:

没有答案