Azure 读取CSV时,是否有从第2行或以下开始的选项?
我正在使用下面的示例代码将一组CSV文件读入数据帧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认为该文件有
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())
可能重复的