spark - scala:不是 org.apache.spark.sql.Row 的成员
spark - scala: not a member of org.apache.spark.sql.Row
我正在尝试将数据帧转换为 RDD,然后对 return 元组执行以下操作:
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)
^
当您将 DataFrame 转换为 RDD 时,您会得到一个 RDD[Row]
,因此当您使用 map
时,您的函数会收到一个 Row
作为参数。因此,必须使用Row
方法访问其成员(注意索引从0开始):
df.rdd.map {
row: Row => (row.getString(1) + "_" + row.getString(2), row)
}.take(5)
您可以查看更多示例并查看 Spark scaladoc 中 Row
个对象可用的所有方法。
编辑:我不知道你做这个操作的原因,但是为了连接 DataFrame 的字符串列,你可以考虑以下选项:
import org.apache.spark.sql.functions._
val newDF = df.withColumn("concat", concat(df("col2"), lit("_"), df("col3")))
您可以像访问 List
或 Array
一样访问 Row 的每个元素,这意味着使用 (index)
,但是您可以使用方法 get
也。
例如:
df.rdd.map {t =>
(t(2).toString + "_" + t(3).toString, t)
}.take(5)
我正在尝试将数据帧转换为 RDD,然后对 return 元组执行以下操作:
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)
^
当您将 DataFrame 转换为 RDD 时,您会得到一个 RDD[Row]
,因此当您使用 map
时,您的函数会收到一个 Row
作为参数。因此,必须使用Row
方法访问其成员(注意索引从0开始):
df.rdd.map {
row: Row => (row.getString(1) + "_" + row.getString(2), row)
}.take(5)
您可以查看更多示例并查看 Spark scaladoc 中 Row
个对象可用的所有方法。
编辑:我不知道你做这个操作的原因,但是为了连接 DataFrame 的字符串列,你可以考虑以下选项:
import org.apache.spark.sql.functions._
val newDF = df.withColumn("concat", concat(df("col2"), lit("_"), df("col3")))
您可以像访问 List
或 Array
一样访问 Row 的每个元素,这意味着使用 (index)
,但是您可以使用方法 get
也。
例如:
df.rdd.map {t =>
(t(2).toString + "_" + t(3).toString, t)
}.take(5)