15

对于 spark 和 hive 以及大数据和 scala 等等来说,这真是太新了。我正在尝试编写一个简单的函数,它需要一个 sqlContext,从 s3 加载一个 csv 文件并返回一个 DataFrame。问题是这个特定的 csv 使用 ^A(即 \001)字符作为分隔符,并且数据集很大,所以我不能只在其上执行“s/\001/,/g”。此外,这些字段可能包含我可能用作分隔符的逗号或其他字符。

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

4

2 回答 2

30

如果您检查 GitHub 页面,则有一个delimiterspark-csv 参数(正如您还指出的那样)。像这样使用它:

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")
于 2016-03-15T09:55:50.873 回答
3

对于 Spark 2.x 和 CSV API,使用以下sep选项:

val df = spark.read
  .option("sep", "\u0001")
  .csv("path_to_csv_files")
于 2019-05-07T16:46:40.320 回答