Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 如何使用带管道的多字符分隔符进行拆分?_Scala_Apache Spark_Apache Spark Sql - Fatal编程技术网

Scala 如何使用带管道的多字符分隔符进行拆分?

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

我正在尝试基于分隔符拆分spark中数据帧的字符串列“::”

测试代码:

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|
// +---+--------------------+------------+
[更新]

您还可以使用三重引号作为分隔符,在这种情况下,您仍然必须转义
,以指示它是文字管道(而不是正则表达式中的
):

请注意,使用三重引号时,您只需要一个转义字符
\
,而没有三重引号时,转义字符本身需要转义(因此
\