【发布时间】:2017-02-26 23:55:30
【问题描述】:
我正在处理Movie Lens 数据集。在csv 文件之一中,数据结构如下:
movieIdmovieTitlegenres
而genres 又是| 分隔值的列表,该字段可以为空。
我正在尝试获取所有 genres 的唯一列表,以便我可以重新排列数据如下:
movieIdmovieTitlegenre1genre2...genreN
一行,genre 和 genre1 | genre2 看起来像:
1Title1110...0
到目前为止,我已经能够使用以下代码读取csv 文件:
val conf = new SparkConf().setAppName(App.name).setMaster(App.sparkMaster)
val context = new SparkContext(conf)
val sparkSession = SparkSession.builder()
.appName(App.name)
.config("header", "true")
.config(conf = conf)
.getOrCreate()
val movieFrame: DataFrame = sparkSession.read.csv(moviesPath)
如果我尝试类似:
movieFrame.rdd.map(row ⇒ row(2).asInstanceOf[String]).collect()
然后我得到以下异常:
java.lang.ClassNotFoundException: com.github.babbupandey.ReadData$$anonfun$1
然后,此外,我尝试使用以下代码显式提供架构:
val moviesSchema: StructType = StructType(Array(StructField("movieId", StringType, nullable = true),
StructField("title", StringType, nullable = true),
StructField("genres", StringType, nullable = true)))
并尝试过:
val movieFrame: DataFrame = sparkSession.read.schema(moviesSchema).csv(moviesPath)
然后我得到了同样的异常。
有什么方法可以将genres 设置为List 或Set,以便进一步将数据处理成所需的格式?任何帮助将不胜感激。
【问题讨论】:
标签: scala csv apache-spark dataframe spark-dataframe