繁体   English   中英

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

[英]spark - scala: not a member of org.apache.spark.sql.Row

我试图将数据帧转换为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)
                  ^

当您将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的String列,您可以考虑以下选项:

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

您可以访问Row的每个元素,如果它是ListArray ,它意味着使用(index) ,但是您也可以使用方法get

例如:

df.rdd.map {t =>
  (t(2).toString + "_" + t(3).toString, t)
}.take(5)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM