如何在spark sql中使用split函数和delemter@?

kqlmhetl  于 2021-05-19  发布在  Spark
关注(0)|答案(2)|浏览(1881)

我的专栏有如下数据:,

col
---
abc|@|pqr|@|xyz
aaa|@|sss|@|sdf

它由|@|(pipe,@,pipe)表示。
如何用sparksql拆分。
我正在努力 spark.sql("select split(col,'|@|')").show() 但它没有给我正确的结果。我试图逃跑,但还是没有成功。
有人知道这是怎么回事吗。。
注意:我只需要spark sql的解决方案。

inb24sb2

inb24sb21#

我不确定我是否正确理解了你的问题陈述,但是用分隔符分割一个字符串是相当简单的,可以用多种方法来完成。
其中一种方法是使用子串索引-

val data = Seq(("abc|@|pqr|@|xyz"),("aaa|@|sss|@|sdf")).toDF("col1")
data.createOrReplaceTempView("testSplit")

之后是-

%sql
select *,substring_index(col1,'|@|',1) as value1, substring_index(col1,'|@|',2) as value2, substring_index(col1,'|@|',3) as value3 from testSplit

结果-

或-拆分功能文档

%sql
select *,SPLIT(col1,'\\|@\\|') as SplitString from testSplit

结果-

请告诉我这是否符合你的要求。

am46iovg

am46iovg2#

检查以下代码。

scala> adf.withColumn("split_data",split($"data","\\|@\\|")).show(false)
+---------------+---------------+
|data           |split_data     |
+---------------+---------------+
|abc|@|pqr|@|xyz|[abc, pqr, xyz]|
|aaa|@|sss|@|sdf|[aaa, sss, sdf]|
+---------------+---------------+
scala> spark.sql("select * from split_data").show(false)
+---------------+
|data           |
+---------------+
|abc|@|pqr|@|xyz|
|aaa|@|sss|@|sdf|
+---------------+

scala> spark.sql("""select data,split('abc|@|pqr|@|xyz', '\\|\\@\\|') as split_data from split_data""").show(false)
+---------------+---------------+
|data           |split_data     |
+---------------+---------------+
|abc|@|pqr|@|xyz|[abc, pqr, xyz]|
|aaa|@|sss|@|sdf|[abc, pqr, xyz]|
+---------------+---------------+

注意:在spark.sql函数中传递select查询 """ """ &转义特殊符号 \\ .

相关问题