使用带有特定分隔符/分隔符的 Auto Loader 提取 CSV 数据

Posted

技术标签:

【中文标题】使用带有特定分隔符/分隔符的 Auto Loader 提取 CSV 数据【英文标题】:Ingest CSV data with Auto Loader with Specific Delimiters / separator 【发布时间】:2021-10-13 15:11:46 【问题描述】:

我正在尝试使用复杂的分隔符(“~|~”)加载几个 csv 文件

当前代码当前加载 csv 文件,但无法识别正确的列,因为使用了分隔符 (",")。

我正在阅读这里的文档 https://docs.databricks.com/spark/latest/structured-streaming/auto-loader-csv.html,但它没有说明任何内容,或者至少我看不到它

spark.readStream.format("cloudFiles") \
  .option("cloudFiles.format", "csv") \
  # The schema location directory keeps track of your data schema over time
  .option("cloudFiles.schemaLocation", "<path-to-checkpoint>") \
  .load("<path-to-source-data>") \
  .writeStream \
  .option("mergeSchema", "true") \
  .option("checkpointLocation", "<path-to-checkpoint>") \
  .start("<path-to-target")

【问题讨论】:

【参考方案1】:

Documentation 说:

使用 Auto Loader,您可以提取 JSON、CSV、PARQUET、AVRO、TEXT、BINARYFILE 和 ORC 文件。有关这些文件格式的选项,请参阅 Format options。

所以你可以只使用标准的options for CSV files - 你需要delimiter(或sep)选项:

df = spark.readStream.format("cloudFiles") \
  .option("cloudFiles.format", "csv") \
  .option("delimiter", "~|~") \
  .schema(...) \
  .load(...)

【讨论】:

以上是关于使用带有特定分隔符/分隔符的 Auto Loader 提取 CSV 数据的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式从带有空格分隔符和描述中的空格的行中读取发票行详细信息

使用查询公式将带有分隔符的列数据和带有其他分隔符的行数据连接起来

使用 RegEx 忽略分隔符前的特定字符

使用具有不同分隔符的 sed 查找特定条件为真时的 Bash

使用带有自定义分隔符的 postgres 按字符大小复制文本文件

hive serde 中多分隔符字符串的正则表达式