Spark从行中提取值

我有以下数据框


val transactions_with_counts = sqlContext.sql(

  """SELECT user_id AS user_id, category_id AS category_id,

  COUNT(category_id) FROM transactions GROUP BY user_id, category_id""")

我正在尝试将行转换为Rating对象,但是由于x(0)返回一个数组,因此失败


val ratings = transactions_with_counts

  .map(x => Rating(x(0).toInt, x(1).toInt, x(2).toInt))

错误:值toInt不是Any的成员


繁花如伊
浏览 976回答 3
3回答

慕容森

要访问Dataframe的一行的值,您需要使用带for循环rdd.collect的Dataframe。考虑一下您的数据框如下所示。val df = Seq(&nbsp; &nbsp; &nbsp; (1,"James"),&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; &nbsp; (2,"Albert"),&nbsp; &nbsp; &nbsp; (3,"Pete")).toDF("user_id","name")使用rdd.collect您的顶部数据帧。该row变量将包含行类型的数据框的每一行rdd。要从一行中获取每个元素,请使用row.mkString(","),其中将以逗号分隔的值包含每一行的值。使用split函数(内置函数)可以访问rdd带有索引的行的每个列值。for (row <- df.rdd.collect){&nbsp; &nbsp;&nbsp; &nbsp; var user_id = row.mkString(",").split(",")(0)&nbsp; &nbsp; var category_id = row.mkString(",").split(",")(1)&nbsp; &nbsp; &nbsp; &nbsp;}与dataframe.foreach循环相比,上面的代码看起来更大一些,但是通过使用上面的代码,您将对逻辑有更多的控制。
打开App,查看更多内容
随时随地看视频慕课网APP