为了账号安全,请及时绑定邮箱和手机立即绑定

Spark从行中提取值

Spark从行中提取值

繁花如伊 2019-09-24 10:34:29
我有以下数据框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的成员
查看完整描述

3 回答

?
慕容森

TA贡献1853条经验 获得超18个赞

要访问Dataframe的一行的值,您需要使用带for循环rdd.collect的Dataframe。


考虑一下您的数据框如下所示。


val df = Seq(

      (1,"James"),    

      (2,"Albert"),

      (3,"Pete")).toDF("user_id","name")

使用rdd.collect您的顶部数据帧。该row变量将包含行类型的数据框的每一行rdd。要从一行中获取每个元素,请使用row.mkString(","),其中将以逗号分隔的值包含每一行的值。使用split函数(内置函数)可以访问rdd带有索引的行的每个列值。


for (row <- df.rdd.collect)

{   

    var user_id = row.mkString(",").split(",")(0)

    var category_id = row.mkString(",").split(",")(1)       

}

与dataframe.foreach循环相比,上面的代码看起来更大一些,但是通过使用上面的代码,您将对逻辑有更多的控制。


查看完整回答
反对 回复 2019-09-24
  • 3 回答
  • 0 关注
  • 975 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信