如何解析使用 ^A(即 \001)作为 spark-csv 分隔符的 csv?

How to parse a csv that uses ^A (i.e. \001) as the delimiter with spark-csv?

对 spark 和 hive 以及大数据和 scala 以及所有的东西来说都是非常新的。我正在尝试编写一个简单的函数,它接受一个 sqlContext,从 s3 加载一个 csv 文件和 returns 一个 DataFrame。问题是这个特定的 csv 使用 ^A(即 \001)字符作为分隔符并且数据集很大,所以我不能只对它做 "s/[=14=]1/,/g"。此外,这些字段可能包含逗号或其他我可能用作分隔符的字符。

我知道我正在使用的 spark-csv 包有一个分隔符选项,但我不知道如何设置它以便它将 \001 读取为一个字符而不是像转义的 0 , 0 和 1。也许我应该使用 hiveContext 或其他东西?

如果您查看 GitHub 页面,spark-csv 有一个 delimiter 参数(您也注意到了)。 像这样使用它:

val df = sqlContext.read
    .format("com.databricks.spark.csv")
    .option("header", "true") // Use first line of all files as header
    .option("inferSchema", "true") // Automatically infer data types
    .option("delimiter", "\u0001")
    .load("cars.csv")

使用 Spark 2.x 和 CSV API,使用 sep 选项:

val df = spark.read
  .option("sep", "\u0001")
  .csv("path_to_csv_files")