scala - 在 Spark-Scala 中将 Dataset[Row] 转换为 RDD[Array[String]] 的最佳方法?
问题描述
我正在通过读取 csv 文件来创建 spark 数据集。此外,我需要将此 Dataset[Row] 转换为 RDD[Array[String]] 以将其传递给 FpGrowth(Spark MLLIB)。
val df: DataFrame = spark.read.format("csv").option("header", "true").load("/path/to/csv")
val ds: Dataset[Row] = df.groupBy("user").agg(collect_set("values"))
现在,我需要选择列“ values ”并将结果数据集转换为RDD[Array[String]]。
val rddS: RDD[String] = ds.select(concat_ws(",", col("values")).as("items")).distinct().rdd.map(_.mkString(","))
val rddArray: RDD[Array[String]] = rddS.map(s => s.trim.split(','))
我尝试了这种方法,但不确定它是否是最好的方法。请建议我实现这一目标的最佳方法。
解决方案
单线:
val rddArray: RDD[Array[String]] = ds.select("values").as[Array[String]].rdd
顺便说一句,我建议使用基于数据帧的 Spark ML,而不是现在已弃用的基于 RDD 的 Spark MLLib。您可以使用org.apache.spark.ml.fpm.FPGrowth
.
推荐阅读
- ruby - 打开新标签后,ruby watir 中的无头 chrome 浏览器没有响应
- javascript - 如何在 jS if 语句中检查 JSON 字符串值?
- php - 如何在 Oracle SQL 计数中使用计算值
- javascript - 每次渲染后会调用哪个 useEffect?
- java - 如何从 java 客户端发送 ajax 调用
- express - 为什么我的 json 数据在浏览器中的格式不正确?
- authorization - 如何在sim800c中设置授权承载的用户数据参数
- javascript - 检索 API 的一部分
- javascript - 在javascript中转换数组的最佳方法
- c# - 防止实体框架在父插入上插入子对象