spark - scala:不是org.apache.spark.sql.Row的成员

时间:2016-05-19 23:02:28

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

我正在尝试将数据帧转换为RDD,然后执行以下某些操作以返回元组:

df.rdd.map { t=>
 (t._2 + "_" + t._3 , t)
}.take(5)

然后我收到了以下错误。有人有主意吗?谢谢!

<console>:37: error: value _2 is not a member of org.apache.spark.sql.Row
               (t._2 + "_" + t._3 , t)
                  ^

2 个答案:

答案 0 :(得分:9)

将DataFrame转换为RDD时,会得到RDD[Row],因此当您使用map时,您的函数会收到Row作为参数。因此,您必须使用Row方法来访问其成员(请注意索引从0开始):

df.rdd.map { 
  row: Row => (row.getString(1) + "_" + row.getString(2), row)
}.take(5)

您可以查看更多示例,并检查Spark scaladocRow个对象的所有可用方法。

编辑:我不知道您为什么要执行此操作,但是为了连接DataFrame的String列,您可以考虑以下选项:

import org.apache.spark.sql.functions._
val newDF = df.withColumn("concat", concat(df("col2"), lit("_"), df("col3")))

答案 1 :(得分:5)

您可以访问Row的每个元素,如果它是ListArray,则表示使用(index),但您可以使用方法{{1也是。

例如:

get