Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/387.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
Apache spark 如何在带delemter@|的spark sql中使用Split函数?_Apache Spark_Hadoop - Fatal编程技术网

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]|
+---------------+---------------+