我有以下數(shù)據(jù)框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""")我正在嘗試將行轉(zhuǎn)換為Rating對象,但是由于x(0)返回一個數(shù)組,因此失敗val ratings = transactions_with_counts .map(x => Rating(x(0).toInt, x(1).toInt, x(2).toInt))錯誤:值toInt不是Any的成員
3 回答

慕容森
TA貢獻1853條經(jīng)驗 獲得超18個贊
要訪問Dataframe的一行的值,您需要使用帶for循環(huán)rdd.collect的Dataframe。
考慮一下您的數(shù)據(jù)框如下所示。
val df = Seq(
(1,"James"),
(2,"Albert"),
(3,"Pete")).toDF("user_id","name")
使用rdd.collect您的頂部數(shù)據(jù)幀。該row變量將包含行類型的數(shù)據(jù)框的每一行rdd。要從一行中獲取每個元素,請使用row.mkString(","),其中將以逗號分隔的值包含每一行的值。使用split函數(shù)(內(nèi)置函數(shù))可以訪問rdd帶有索引的行的每個列值。
for (row <- df.rdd.collect)
{
var user_id = row.mkString(",").split(",")(0)
var category_id = row.mkString(",").split(",")(1)
}
與dataframe.foreach循環(huán)相比,上面的代碼看起來更大一些,但是通過使用上面的代碼,您將對邏輯有更多的控制。
- 3 回答
- 0 關(guān)注
- 999 瀏覽
添加回答
舉報
0/150
提交
取消