【发布时间】:2021-09-02 11:24:57
【问题描述】:
我有一个 Spark DataFrame:
我必须使用 Spark 和 Scala 来计算来自 RankingMetrics 的平均精度。 我猜根据文档我们必须使用 RDD 而不是 DataFrame。 我尝试了以下方法:
var llist = df.select("predicted", "actual").rdd.map(x => (x.get(0), x.get(1))).collect()
// It gave Array[(Any, Any)]
var df_rdd =sc.parallelize(llist)
// df_rdd is org.apache.spark.rdd.RDD[(Any, Any)]
val metrics = new RankingMetrics(df_rdd)
// This gave me an error
错误:
错误:类型不匹配;
找到:org.apache.spark.rdd.RDD[(Any, Any)]
必需:org.apache.spark.rdd.RDD[(Array[?], Array[?])]
注意:(Any, Any) >: (Array[?], Array[?]),但是类 RDD 在类型 T 中是不变的。
您可能希望将 T 定义为 -T。 (SLS 4.5)
我使用的是 Spark 2.4.3 版
如何将此 DataFrame 转换为该格式,以便计算平均精度?谢谢。
【问题讨论】:
-
您的数据框架构是什么?你能提出示例数据来测试你的过程吗?无法复制图像并重新创建问题。
-
@Lamanus 两列都是数组(或列表)您可以使用以下方法创建示例: val df = Seq( (List(1, 9,16), List(27, 729, 688 )), (List(1, 4, 548), List()), (List(1,5,3), List(688)) ).toDF("predicted", "actual")
标签: dataframe apache-spark multidimensional-array rdd average-precision