Apache spark 如何在带delemter@|的spark sql中使用Split函数?
我的专栏有如下数据:Apache spark 如何在带delemter@|的spark sql中使用Split函数?,apache-spark,hadoop,Apache Spark,Hadoop,我的专栏有如下数据: col --- abc|@|pqr|@|xyz aaa|@|sss|@|sdf 它由|@|(pipe,@,pipe)表示 如何使用sparksql拆分此文件 我正在尝试spark.sql(“选择split(col,“|@|”))”.show(),但它没有给我正确的结果。 我试图逃跑,但还是没有成功 有人知道这里发生了什么吗 注意:我只需要spark sql的解决方案。我不确定是否正确理解了您的问题陈述,但按分隔符拆分字符串相当简单,可以通过多种方式完成 其中一种方法是使用
col
---
abc|@|pqr|@|xyz
aaa|@|sss|@|sdf
它由|@|(pipe,@,pipe)表示
如何使用sparksql拆分此文件
我正在尝试spark.sql(“选择split(col,“|@|”))”.show()
,但它没有给我正确的结果。
我试图逃跑,但还是没有成功
有人知道这里发生了什么吗
注意:我只需要spark sql的解决方案。我不确定是否正确理解了您的问题陈述,但按分隔符拆分字符串相当简单,可以通过多种方式完成 其中一种方法是使用子字符串_索引-
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
结果-
或-
结果-
请务必让我知道这是否满足您的要求。检查下面的代码
scala> adf.withColumn("split_data",split($"data","\\|@\\|")).show(false)
+---------------+---------------+
|data |split_data |
+---------------+---------------+
|abc|@|pqr|@|xyz|[abc, pqr, xyz]|
|aaa|@|sss|@|sdf|[aaa, sss, sdf]|
+---------------+---------------+
注意:在spark.sql函数中,在和\
之间传递select查询,并用\
转义特殊符号
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]|
+---------------+---------------+