首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >postgres regexp_substr的pyspark等效项无法提取值

postgres regexp_substr的pyspark等效项无法提取值
EN

Stack Overflow用户
提问于 2021-01-26 10:33:53
回答 1查看 26关注 0票数 0

我正在尝试将我已有的一些postgres sql代码调整为pyspark sql。在postgres sql中,我使用regexp_substr函数解析出‘.5G’,如果它出现在productname列的字符串中。(我已经在下面包含了示例代码)。在pyspark方面,我尝试使用regexp_extract函数,但它只返回null。我将postgres中的regexp_replace函数的输出与pyspark进行了比较,结果返回了相同的值。所以问题一定出在regexp_extract函数中。我已经创建了一个示例输入dataframe和下面运行的pyspark代码。有没有人能告诉我我哪里做错了,并建议如何修复它,谢谢。

postgres:

代码语言:javascript
复制
select
regexp_substr(trim(upper(regexp_replace(a.productname, '[,/#!$%^&*;:{}=_`~()-]'))), ' .5G') as A

from df

输出:

代码语言:javascript
复制
' .5G'

代码:

代码语言:javascript
复制
# creating dummy data

df = sc.parallelize([('LEMON MERINGUE .5G CAKE SUGAR', )]).toDF(["productname"])


# turning dataframe into view
df.createOrReplaceTempView("df")


# example query trying to extract ' .5G'
testquery=("""select
regexp_extract('('+trim(upper(regexp_replace(a.productname, '[,/#!$%^&*;:{}=_`~()-]','')))+')', ' .5G',1) as A
from df a
""")


# creating dataframe with extracted value in column
test_df=spark.sql(testquery)

test_df.show(truncate=False)

输出:

代码语言:javascript
复制
+----+
|A   |
+----+
|null|
+----+
EN

回答 1

Stack Overflow用户

发布于 2021-01-26 16:38:52

您需要将'.5G'放在括号中,而不是将列放在括号中。

代码语言:javascript
复制
testquery = """
select
    regexp_extract(trim(upper(regexp_replace(a.productname, '[,/#!$%^&*;:{}=_`~()-]',''))), '( .5G)', 1) as A
from df a
"""

test_df = spark.sql(testquery)
test_df.show(truncate=False)
+----+
|A   |
+----+
| .5G|
+----+

还要注意,您不能将字符串+在一起;为此,请使用concat

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65895152

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档