Scala 如何解析使用^a(即.\001)作为带spark csv分隔符的csv?

Scala 如何解析使用^a(即.\001)作为带spark csv分隔符的csv?,scala,apache-spark,hive,delimiter,spark-csv,Scala,Apache Spark,Hive,Delimiter,Spark Csv,对于spark、hive、大数据、scala以及所有这些都是非常新的。我试图编写一个简单的函数,它接受sqlContext,从s3加载一个csv文件并返回一个数据帧。问题是,这个特定的csv使用^A(即.\001)字符作为分隔符,并且数据集非常大,因此我不能仅对其执行“s/\001/,/g”。此外,字段可能包含逗号或其他我可能用作分隔符的字符 我知道我正在使用的spark csv包有一个分隔符选项,但我不知道如何设置它,以便它将\001作为一个字符读取,而不是像转义的0、0和1那样。也许我应该使

对于spark、hive、大数据、scala以及所有这些都是非常新的。我试图编写一个简单的函数,它接受sqlContext,从s3加载一个csv文件并返回一个数据帧。问题是,这个特定的csv使用^A(即.\001)字符作为分隔符,并且数据集非常大,因此我不能仅对其执行“s/\001/,/g”。此外,字段可能包含逗号或其他我可能用作分隔符的字符


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

如果您查看GitHub页面,则spark 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")

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

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

非常感谢。我不知道这件事。你能更准确地解释一下它的意思和作用吗?我猜“u”代表unicode,但我想正确理解这一点。字符\char标记转义序列的开始,这意味着以下字符不是字符串的一部分,而是具有特殊含义。
u
字符表示以下数字是字符的Unicode代码,0001是该特殊字符的Unicode代码。因此,它只是在字符串中插入该特殊字符。如果使用PySparkId,则使用“\x01”作为分隔符。选项(“分隔符”,“\u0001”)。它给我一个错误,如下java.lang.IllegalArgumentException所示:分隔符不支持的特殊字符:\u0001位于org.apache.spark.sql.execution.datasources.csv.CSVUtils$.toChar(CSVUtils.scala:106)在org.apache.spark.sql.execution.datasources.csv.CSVOptions.(CSVOptions.scala:83)在org.apache.spark.sql.execution.datasources.csv.CSVOptions.(CSVOptions.scala:39)如果您使用的是spark 2.x,那么您将使用内置的csv解析器,该解析器目前不支持将任何字符设置为分隔符。