Не удается разобрать разделитель типа \ u0003 при чтении текстового файла в Databricks (Scala) - PullRequest
0 голосов
/ 11 июля 2019

У меня есть текстовый файл с сообщениями, в котором есть несколько разделителей типа \ u0003, \ u0002 и т. Д. Я использую функцию Split при загрузке данных в 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.................................

Ответы [ 2 ]

0 голосов
/ 12 июля 2019

Вот два решения:

//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 как строку-разделитель.

0 голосов
/ 11 июля 2019

Итак, я пробовал некоторые другие комбинации, и это, кажется, работает

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