在Databricks(Scala)中读取文本文件时无法解析\ u0003类型的定界符

时间:2019-07-11 15:21:13

标签: scala databricks

我有一个文本文件,其中包含带有多个\ u0003,\ u0002等类型的定界符的消息。我在将数据加载到Rdd时使用了Split函数,但是无法删除定界符。当我将分隔符从\ u0003更改为u0003时,split函数似乎对rdd起作用,但随后我剩下一个额外的\ ..

我看到了一些解决方案,他们提到下面的代码应该可以工作。

val input = sc.textFile("filename.txt").map(_.split("\u0003"))

input.collect()

我只是得到了整个字符串,而没有删除定界符

import org.apache.spark.sql.{Row, SparkSession}
import org.apache.spark.sql.types.{DoubleType, StringType, StructField, StructType}
import org.apache.spark.rdd.RDD
input: org.apache.spark.rdd.RDD[Array[String]] = MapPartitionsRDD[4031] at map at command-1662719304326521:7
res24: Array[Array[String]] = Array(Array({"GDSFE001\u00031\u0003N\u00030\u0003Confirm_Shipment_Closed\u00035572214\u0003B\u0003I7EPM0XV1Z8KB\u0003TAG0000\u0001\u000220190516\u00011409\u0001GCSS\u0001Message Broker\u0001\u0001\u0001\u0001O\u0001\u0001\u0001N\u0001BKG\u0001\u0001\u0001\u000163.0\u0002TAGT100\u0001HDZKG4XV1Z9KB\u0001BNILG4XV1Z9KB.................................

2 个答案:

答案 0 :(得分:0)

所以我正在尝试其他组合,但这似乎可行

val input = sc.textFile("/FileStore/tables/IIB_downloaded_test.txt").map(_.split("""\\u0003""")) 

答案 1 :(得分:0)

以下是两种解决方案:

//For a dataframe or dataset
val dataFrame = spark.read.option("delimiter", """\\u0003""").textFile("path")

//For an rdd
val rdd = spark.sparkContext.textFile("path").map(_.split("""\\u0003"""))

之所以无法使用“ \ u0003”,而是需要使用“ \ u0003”或“ \”,是因为双引号会将字符转义并且将其读取为转义的\ u 而三个双引号会将整个\ u0003视为分隔符字符串。