我有以下数据框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循环相比,上面的代码看起来更大一些,但是通过使用上面的代码,您将对逻辑有更多的控制。
- 3 回答
- 0 关注
- 975 浏览
添加回答
举报
0/150
提交
取消