Scala 如何使用带管道的多字符分隔符进行拆分?
我正在尝试基于分隔符拆分spark中数据帧的字符串列“::” 测试代码:Scala 如何使用带管道的多字符分隔符进行拆分?,scala,apache-spark,apache-spark-sql,Scala,Apache Spark,Apache Spark Sql,我正在尝试基于分隔符拆分spark中数据帧的字符串列“::” 测试代码: dataframe1 .withColumn("splitColumn", split(col("testcolumn"), ":|:|:")) dataframe1 .withColumn("part1", split(col("testcolumn"), ":|:|:").getItem(0)) .withColumn("part2", split(col("testcolumn"), ":|:|:").getIte
dataframe1
.withColumn("splitColumn", split(col("testcolumn"), ":|:|:"))
dataframe1
.withColumn("part1", split(col("testcolumn"), ":|:|:").getItem(0))
.withColumn("part2", split(col("testcolumn"), ":|:|:").getItem(3))
.withColumn("part3", split(col("testcolumn"), ":|:|:").getItem(6))
结果:
+------------------------------+
|splitColumn |
+------------------------------+
|[TEST, |, |, 51, |, |, P] |
+------------------------------+
测试代码:
dataframe1
.withColumn("splitColumn", split(col("testcolumn"), ":|:|:"))
dataframe1
.withColumn("part1", split(col("testcolumn"), ":|:|:").getItem(0))
.withColumn("part2", split(col("testcolumn"), ":|:|:").getItem(3))
.withColumn("part3", split(col("testcolumn"), ":|:|:").getItem(6))
零件1和零件2工作正常。
第3部分只有2个字符,字符串的其余部分被截断
第三部分:
P
我想得到整个part3字符串。
非常感谢您的帮助。您就快到了–只需在您的分隔符中转义
,如下所示:
val df = Seq(
(1, "TEST:|:|:51:|:|:PHT054008056"),
(2, "TEST:|:|:52:|:|:PHT053007057")
).toDF("id", "testcolumn")
df.withColumn("part3", split($"testcolumn", ":\\|:\\|:").getItem(2)).show
// +---+--------------------+------------+
// | id| testcolumn| part3|
// +---+--------------------+------------+
// | 1|TEST:|:|:51:|:|:P...|PHT054008056|
// | 2|TEST:|:|:52:|:|:P...|PHT053007057|
// +---+--------------------+------------+
[更新]
您还可以使用三重引号作为分隔符,在这种情况下,您仍然必须转义
,以指示它是文字管道(而不是正则表达式中的或):
请注意,使用三重引号时,您只需要一个转义字符\
,而没有三重引号时,转义字符本身需要转义(因此\
)