Split_Part() 的 Spark SQL 等效项

Posted

技术标签:

【中文标题】Split_Part() 的 Spark SQL 等效项【英文标题】:Spark SQL equivalent for Split_Part() 【发布时间】:2021-12-07 16:31:45 【问题描述】:

我正在尝试获得等价物

split_part(split_part(to_id, '_', 1), '|', 3) 

在 Spark SQL 中

谁能帮忙

SELECT
to_id
,split(to_id,'_')[1] AS marketplace_id
,from_id
,split(split(to_id, '_')[0], '|')[2] AS asin
--,split(to_id, '|')[2] AS asin
FROM DDD

上下文:

to_id = ASIN|CATALOG|B0896YZABL_7 
expected = B0896YZABL 
current output = |

【问题讨论】:

【参考方案1】:

您必须像这样\\| 转义竖线字符|

以下是一个简单的 Scala 示例,您可以在交互式 Scala shell 中尝试:

val s = "ASIN|CATALOG|B0896YZABL_7"
val result = s.split("\\|") // Will be Array(ASIN, CATALOG, B0896YZABL_7)
print(result.last) // Prints 'B0896YZABL_7'

在你的情况下,应该是:

SELECT
to_id
,split(to_id,'_')[1] AS marketplace_id
,from_id
,split(split(to_id, '_')[0], '\\|')[2] AS asin
--,split(to_id, '\\|')[2] AS asin
FROM DDD

【讨论】:

以上是关于Split_Part() 的 Spark SQL 等效项的主要内容,如果未能解决你的问题,请参考以下文章

vertica截取函数-split_part

Redshift - Split_Part 和最小值

使用sql截取字符串中指定分割符的最后一位

Presto SQL - 将日期字符串转换为日期格式

spark-sql 与 spark-shell REPL 中的 Spark SQL 性能差异

1.Spark SQL基础—Spark SQL概述Spark SQL核心编程—DataFrameDataSet