首页 > 解决方案 > 读取 CSV 时,是否可以从第 2 行或以下开始?

问题描述

我正在使用下面的示例代码将一堆 CSV 文件读入数据框中。

val df = spark.read.format("csv")
   .option("sep","|")
   .option("inferSchema","true")
   .option("header","false")
   .load("mnt/rawdata/corp/ABC*.gz")

我希望有一种方法可以从第 2 行或以下开始,因为第 1 行包含有关这些文件的一些基本元数据,并且第一行有 4 个竖线字符,所以 Spark 认为该文件有 4 列,但它实际上已经超过实际数据中的 100 列。

我尝试使用 inferSchema 和标题,但我无法得到任何工作。

标签: azureapache-sparkpysparkdatabricks

解决方案


如果 CSV 中的第一行与实际的列数和名称不匹配,您可能需要手动定义架构,然后尝试以下组合:

val df = spark.read.format("csv")
   .option("sep","|")
   .option("inferSchema","false")
   .option("header","true")     
   .schema(mySchema)
   .option("enforceSchema","true")
   .load(...

CSV 选项的完整列表

请注意,对于 Spark 2.3 及更高版本,您可以使用简写、SQL 样式的符号来定义模式 - 简单字符串"column1 type1, column2 type2, ..."

但是,如果您的标题不止一行,您可能会被迫通过使用附加选项来忽略所有“错误” .option("mode","DROPMALFORMED")


推荐阅读