我想使用Spark CSV阅读器阅读RDD[String]
。我这样做的原因是,在使用CSV阅读器之前,我需要过滤一些记录。
val fileRDD: RDD[String] = spark.sparkContext.textFile("file")
我需要使用spark CSV阅读器读取fileRDD。我不希望提交该文件,因为它会增加HDFS的IO。我调查了Spark CSV中的选项,但没有找到任何选项。
spark.read.csv(file)
样本数据
PHM|MERC|PHARMA|BLUEDRUG|50
CLM|BSH|CLAIM|VISIT|HSA|EMPLOYER|PAID|250
PHM|GSK|PHARMA|PARAC|70
CLM|UHC|CLAIM|VISIT|HSA|PERSONAL|PAID|72
如您所见,所有以PHM开头的记录具有不同的列数,而clm具有不同的列数。这就是我过滤然后应用架构的原因。 PHM和CLM记录具有不同的架构。
val fileRDD: RDD[String] = spark.sparkContext.textFile("file").filter(_.startWith("PHM"))
spark.read.option(schema,"phcschema").csv(fileRDD.toDS())
答案 0 :(得分:0)
从Spark 2.2开始,方法“ .csv”可以读取字符串数据集。可以通过以下方式实现:
val rdd: RDD[String] = spark.sparkContext.textFile("csv.txt")
// ... do filtering
spark.read.csv(rdd.toDS())