azure - 读取 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 和标题,但我无法得到任何工作。
解决方案
如果 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, ..."
。
但是,如果您的标题不止一行,您可能会被迫通过使用附加选项来忽略所有“错误” .option("mode","DROPMALFORMED")
。
推荐阅读
- r - 根据列中的值更改 geom_point 的大小
- arrays - 修复“没有更多上下文的表达式类型不明确”
- apache - 以下警告即将进行水槽升级。为什么会出现以及如何删除它?
- mongodb - 如何使用 helm bitnami/mongodb 和 kube-prometheus-stack 设置 mongodb grafana 仪表板
- python - 我无法将字符串类型中的 ' , ' 替换为 ' ' 以将其转换为整数
- java - java获取elasticsearch中某个字段的所有值
- firebase - Flutter / Firebase 延迟推送通知
- spring-boot - 为什么 TestContainer 使用错误的 URL(缺少 'tc')?
- c# - WPF ItemTemplateSelector 从不加载到 UI
- python - 游戏:制造多个障碍物飞向你的船