Как работать с разделителем с обратной косой чертой в данных - PullRequest
0 голосов
/ 08 июня 2018

Как мне обработать |, который также является разделителем в моих данных,

Вот примерное значение поля,

|152| XXXXXXXXXX XXXXXXXXXX.1001 0503~ADX\|0\|ZZ~NTE\|ADD\|XXXXXXXXXX/~SE\|40\|0060~GE\||

значение XXXXXXXXXX XXXXXXXXXX.1001 0503~ADX\|0\|ZZ~NTE\|ADD\|XXXXXXXXXX/~SE\|40\|0060~GE\ является одним полемзначение, но из-за экранирования обратной косой черты значения перемещаются в следующие поля.

Мне нужно иметь значение столбца XXXXXXXXXX XXXXXXXXXX.1001 0503~ADX\|0\|ZZ~NTE\|ADD\|XXXXXXXXXX/~SE\|40\|0060~GE\, и оно не должно разбиваться на несколько столбцов. Как можно это исправить.

regexp_replace(col(c), "\\\\|", "\\\\\\\\|")) не работает

1 Ответ

0 голосов
/ 08 июня 2018

Как уже упоминалось в вопросе, если у вас есть данные в формате

152| XXXXXXXXXX XXXXXXXXXX.1001 0503~ADX\|0\|ZZ~NTE\|ADD\|XXXXXXXXXX/~SE\|40\|0060~GE\||

Затем вы должны прочитать их, используя текстовый файл sparkContext и заменить \| некоторыми другими строками изатем split с |, преобразование в dataframe и, наконец, использование функции regexp_replace для замены преобразованной строки обратно на \|

val rdd = sc.textFile("path to the text file")
              .map(line => Row.fromSeq(line.replaceAll("\\\\\\|", "#%#").split("\\|", -1).toSeq))

val schema = StructType(Seq(StructField("col1", StringType, true),StructField("col2", StringType, true),StructField("col3", StringType, true)))

val df = spark.createDataFrame(rdd, schema)

df.withColumn("col2", regexp_replace(col("col2"), "#%#", "\\\\\\|")).show(false)

, что должно дать вам

+----+-----------------------------------------------------------------------------------+----+
|col1|col2                                                                               |col3|
+----+-----------------------------------------------------------------------------------+----+
|152 | XXXXXXXXXX XXXXXXXXXX.1001 0503~ADX\|0\|ZZ~NTE\|ADD\|XXXXXXXXXX/~SE\|40\|0060~GE\||    |
+----+-----------------------------------------------------------------------------------+----+

Надеюсь, ответ полезен

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...