我有以下數據框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 關注
- 1004 瀏覽
添加回答
舉報
0/150
提交
取消