scala - 在 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.................................
解决方案
以下是两种解决方案:
//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 视为分隔符细绳。
推荐阅读
- javascript - 如何使 Fetch API 从 JSON 文件返回一个键及其值,而不是在控制台中返回整个文件
- javascript - 工作箱 vuejs 在生产和快递中的路由问题
- google-sheets - How to reference 2 other pages (3 including the one I call the function on) in one query function?
- c - 数据类型和格式说明符
- ios - 我需要将变量中的值传递给我的参数
- java - 如何使用 java 代码更改 json 对象中的任何属性值
- node.js - 如何在 Heroku 上跳过 npm 错误?
- angular - 如何从 API 调用/获取 out 参数到 Angular4
- java - 如何使用 Mockito 或 powerMock 对下面的 java 泛型类进行单元测试?
- javascript - 在 d3.arc 属性中使用函数