azure - 读取 CSV 时,是否可以选择从第 2 行或以下行开始?

标签 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 认为该文件有 4 列,但它实际数据实际上有超过 100 列。

我尝试使用 inferSchema 和 header ,但我无法让任何东西发挥作用。

最佳答案

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

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

Full list of CSV options

请注意,对于 Spark 2.3 及更高版本,您可以使用 SQL 样式的简写表示法进行模式定义 - 简单字符串 “column1 type1, column2 type2, ...”

但是,如果您的 header 有多于一行,您可能会被迫使用附加选项 .option("mode","DROPMALFORMED") 来忽略所有“错误”。

关于azure - 读取 CSV 时,是否可以选择从第 2 行或以下行开始?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58591007/

相关文章:

azure - 如何获取 yaml-pipeline 需求?

python - pyspark: TypeError: IntegerType 无法接受类型为 <type 'unicode' > 的对象

python - 在 pyspark 数据帧上用逗号替换点

amazon-web-services - 默认的 EMR Spark 是否预先配置为直接访问 redshift 表?

jdbc - 如何使用 JDBC 将 Impala 表直接加载到 Spark?

python - Spark中跨分区的Reduce函数 pyspark

apache-spark - 来自 Kafka Consumer 的 Spark Streaming

python - Azure 服务总线 - 查看计划消息

azure - 使用 Powershell 脚本将 azure sql 数据库差异备份到存储帐户 blob 存储

azure - 从 Azure 网站连接字符串配置读取连接字符串