![](/img/trans.png)
[英]Spark: Split is not a member of 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的每个元素,如果它是List
或Array
,它意味着使用(index)
,但是您也可以使用方法get
。
例如:
df.rdd.map {t =>
(t(2).toString + "_" + t(3).toString, t)
}.take(5)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.