首页 > 解决方案 > 在 Databricks(Scala)中读取文本文件时无法解析类型为 \u0003 的分隔符

问题描述

我有一个文本文件,其中包含多个类型为 \u0003、\u0002 等的分隔符。我在将数据加载到 Rdd 时使用了拆分功能,但我无法删除分隔符。当我将分隔符从 \u0003 更改为 u0003 时,拆分功能似乎对 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.................................

标签: scaladatabricks

解决方案


以下是两种解决方案:

//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 视为分隔符细绳。


推荐阅读