【问题标题】:spark - scala: not a member of org.apache.spark.sql.Rowspark - scala:不是 org.apache.spark.sql.Row 的成员
【发布时间】:2016-09-17 01:17:09
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    当您将 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")))
    

    【讨论】:

      【解决方案2】:

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

      例如:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-12-12
        • 1970-01-01
        • 2015-10-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-07
        • 1970-01-01
        相关资源
        最近更新 更多