我如何处理|
,它也是我数据中的分隔符,
以下是示例字段值
|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), "\\\\|", "\\\\\\\\|"))
无效
答案 0 :(得分:1)
如问题中所述,如果您的格式为
152| XXXXXXXXXX XXXXXXXXXX.1001 0503~ADX\|0\|ZZ~NTE\|ADD\|XXXXXXXXXX/~SE\|40\|0060~GE\||
然后,您应该使用 sparkContext的textFile 读取它,并将\|
替换为其他字符串,然后将 split 替换为|
,转换为{ {1}}并最终使用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)
我希望答案很有帮助