无法在 Spark 中将 CSV 文件加载为数据框

Posted

技术标签:

【中文标题】无法在 Spark 中将 CSV 文件加载为数据框【英文标题】:Unable load a CSV file as dataframe in spark 【发布时间】:2018-12-31 09:09:20 【问题描述】:

我正在尝试在数据框中加载一个 CSV 文件,我的目标是将第一行显示为 CSV 文件的列名。但是在使用下面的代码时,我收到了错误

Exception in thread "main" java.lang.AbstractMethodError
    at scala.collection.TraversableLike$class.filterNot(TraversableLike.scala:278)

代码:

def main(args : Array[String]): Unit = 
 val spark : SparkSession = SparkSession
      .builder()
      .master("local")
      .appName("SparkSessioncsvExample")
      .config("spark.some.config.option", "some-value")
      .getOrCreate()
   val df = spark.read
      .format("csv")
      .option("header", "true") //reading the headers
      .load("D:/Scala/C2ImportCalEventSample.csv")

但我可以使用代码加载文件:

val df = spark.sparkContext
        .textFile("D:/Scala/C2ImportCalEventSample1.csv")
        //.flatMap(header='true')
        .map(line => line.split(","))
        // .map(line => line.map()
        .toDF()

但在第二个代码文件中被成功加载,但第一行没有作为数据框的 column_name。

spark version is: spark-2.3.2  
scala 2.11.3  
jdk1.8.0_20
sbt-1.2.7

感谢任何可以帮助我的人。

【问题讨论】:

你的第二种方法实际上是加载文本文件..所以你不会得到列名..你能否将示例 csv 粘贴到问题中 你的类路径中也有 scala 2.10 吗? 如何执行应用程序? 【参考方案1】:

java.lang.AbstractMethodError 几乎总是意味着类路径上的库与编译时不同。在这种情况下,我会检查以确保您在类路径中拥有正确版本的 Scala(并且只有一个版本的 scala)。

【讨论】:

谢谢,Harjeet kumar,我的环境变量指向 scala 2.12.8 而我的 sbt 文件是 2.11.3。我已经在 sbt 文件中将我的 env varibale 更改为 2.11.8 版本,它是 2.11.8 版本。它是工作文件。感谢您的帮助。

以上是关于无法在 Spark 中将 CSV 文件加载为数据框的主要内容,如果未能解决你的问题,请参考以下文章

谁在 Apache Spark 中将分区加载到 RAM 中?

无法过滤存储在 spark 2.2.0 数据框中的 CSV 列

如何在 pyspark 数据框中将变量值分配为新列值?

如何在数据框中指定缺失值

Spark-SQL:如何将 TSV 或 CSV 文件读入数据框并应用自定义模式?

无法在python数据框中将列类型从对象转换为str