Azure 读取CSV时,是否有从第2行或以下开始的选项?

Azure 读取CSV时,是否有从第2行或以下开始的选项?,azure,apache-spark,pyspark,databricks,Azure,Apache Spark,Pyspark,Databricks,我正在使用下面的示例代码将一组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认为该文件有

我正在使用下面的示例代码将一组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多列


我尝试使用Infreschema和header,但无法获得任何结果。

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

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

请注意,对于Spark 2.3及更高版本,您可以使用SQL风格的简写符号进行模式定义——简单字符串
“column1 type1,column2 type2,…”


但是,如果标题有多行,则可能会使用附加选项
。选项(“mode”,“dropmorformed”)
,强制您忽略所有“错误”

你说得对!您需要定义一个自定义模式!我最终还是选择了这个

import org.apache.spark.sql.SQLContext
import org.apache.spark.sql.types.{StructType, StructField, StringType, IntegerType};
import org.apache.spark.sql.functions.input_file_name

val customSchema = StructType(Array(
    StructField("field1", StringType, true),
    StructField("field2", StringType, true),
    StructField("field3", StringType, true),
    StructField("field4", StringType, true),
    StructField("field5", StringType, true),
    StructField("field6", StringType, true),
    StructField("field7", StringType, true)))

val df = sqlContext.read
    .format("com.databricks.spark.csv")
    .option("header", "false")
    .option("sep", "|")
    .schema(customSchema)
    .load("mnt/rawdata/corp/ABC*.gz")
    .withColumn("file_name", input_file_name())
可能重复的