spark下生成多个returns
generate multiple returns under spark
我正在使用来自 Spark 的 ALS 库,并且在从一行生成多个 returns 时遇到了一些问题。假设我有一个文件,一行的分隔符是“#”。所以这是我到目前为止得到的:
val ratings : RDD[Rating] = data.map(_.split('#')).map(items => {
for (i <- 1 until items.length)
if ( items(i).length() > 2)
Rating(items(0).toInt, i.toInt, items(i).toDouble)
})
理想情况下,我想生成评级类型的数据,但错误显示 "type mismatched: found Unit, required: org.apache.spark.mllib.recommendation.Rating"
有没有办法使用 Scala 在 Spark 中从一行创建多行?有什么想法吗?
我正在使用 spark 2.1.X 和 scala 2.11.
你还应该传递一些东西(Rating(-1, -1, -1.0)),以防if ( items(i).length() > 2)
这个条件不满足。然后根据 Rating(-1, -1, -1.0)
筛选值
例子
val ratings : RDD[Rating] = data.map(_.split('#')).map(items =>
{
for (i <- 1 until items.length)
if ( items(i).length() > 2)
Rating(items(0).toInt, i.toInt, items(i).toDouble)
else
Rating(-1, -1, -1.0)
}
)
如果我对你的问题的理解正确,你想从 RDD 中解析一条记录,根据某些条件,你将得到两条记录并将其作为映射操作的结果传递。
如果是这种情况,那么您可以执行以下操作:
val ratings : RDD[Rating] = data.map(_.split('#')).map(items => {
val list = new ArrayBuffer[Rating]
for (i <- 1 until items.length)
list += Rating(items(i), i.toInt)
list
}).flatMap(row => row)
此处 flatMap
会将对象列表展平为单个记录
我正在使用来自 Spark 的 ALS 库,并且在从一行生成多个 returns 时遇到了一些问题。假设我有一个文件,一行的分隔符是“#”。所以这是我到目前为止得到的:
val ratings : RDD[Rating] = data.map(_.split('#')).map(items => {
for (i <- 1 until items.length)
if ( items(i).length() > 2)
Rating(items(0).toInt, i.toInt, items(i).toDouble)
})
理想情况下,我想生成评级类型的数据,但错误显示 "type mismatched: found Unit, required: org.apache.spark.mllib.recommendation.Rating"
有没有办法使用 Scala 在 Spark 中从一行创建多行?有什么想法吗?
我正在使用 spark 2.1.X 和 scala 2.11.
你还应该传递一些东西(Rating(-1, -1, -1.0)),以防if ( items(i).length() > 2)
这个条件不满足。然后根据 Rating(-1, -1, -1.0)
例子
val ratings : RDD[Rating] = data.map(_.split('#')).map(items =>
{
for (i <- 1 until items.length)
if ( items(i).length() > 2)
Rating(items(0).toInt, i.toInt, items(i).toDouble)
else
Rating(-1, -1, -1.0)
}
)
如果我对你的问题的理解正确,你想从 RDD 中解析一条记录,根据某些条件,你将得到两条记录并将其作为映射操作的结果传递。
如果是这种情况,那么您可以执行以下操作:
val ratings : RDD[Rating] = data.map(_.split('#')).map(items => {
val list = new ArrayBuffer[Rating]
for (i <- 1 until items.length)
list += Rating(items(i), i.toInt)
list
}).flatMap(row => row)
此处 flatMap
会将对象列表展平为单个记录