【发布时间】:2023-04-10 02:37:02
【问题描述】:
我正在尝试使用 Scala 将 csv 文件转换为 Spark 1.5.2 中的数据帧,而不使用库数据块,因为它是一个社区项目,并且该库不可用。我的方法如下:
var inputPath = "input.csv"
var text = sc.textFile(inputPath)
var rows = text.map(line => line.split(",").map(_.trim))
var header = rows.first()
var data = rows.filter(_(0) != header(0))
var df = sc.makeRDD(1 to data.count().toInt).map(i => (data.take(i).drop(i-1)(0)(0), data.take(i).drop(i-1)(0)(1), data.take(i).drop(i-1)(0)(2), data.take(i).drop(i-1)(0)(3), data.take(i).drop(i-1)(0)(4))).toDF(header(0), header(1), header(2), header(3), header(4))
这段代码虽然很乱,但运行时不会返回任何错误消息。问题是在尝试显示df中的数据以验证此方法的正确性并稍后尝试在df中进行一些查询时出现问题。执行df.show() 后得到的错误代码是SPARK-5063。我的问题是:
1)为什么不能打印df的内容?
2) 有没有其他更直接的方法可以在不使用库 databricks 的情况下将 csv 转换为 Spark 1.5.2 中的数据帧?
【问题讨论】:
-
“这是一个社区项目”——你是认真的吗?您知道 Databricks 是推动 Spark 开发的公司吗?你知道
spark-csv插件已经合并到Spark 2.x核心库中了吗? -
问题是我没有机会改变它,因此我正在寻找不使用 Databricks 将 csv 解析为数据帧的替代方法。
-
"改变那个" -- 你是什么意思?您无法下载 JAR(一劳永逸)并将其附加到带有
--jars的作业以及它的commons-csv依赖项?在 CDH 发行版中捆绑 Spark 对我来说效果很好(请注意,对于 Apache 构建,--jars不适用于 CDH,我必须使用spark.driver.extraClasspath道具和明确的sc.addJar()作为解决方法)
标签: scala csv apache-spark spark-dataframe