我正在尝试将我已有的一些postgres sql代码调整为pyspark sql。在postgres sql中,我使用regexp_substr函数解析出‘.5G’,如果它出现在productname列的字符串中。(我已经在下面包含了示例代码)。在pyspark方面,我尝试使用regexp_extract函数,但它只返回null。我将postgres中的regexp_replace函数的输出与pyspark进行了比较,结果返回了相同的值。所以问题一定出在regexp_extract函数中。我已经创建了一个示例输入dataframe和下面运行的pyspark代码。有没有人能告诉我我哪里做错了,并建议如何修复它,谢谢。
postgres:
select
regexp_substr(trim(upper(regexp_replace(a.productname, '[,/#!$%^&*;:{}=_`~()-]'))), ' .5G') as A
from df输出:
' .5G'代码:
# 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)输出:
+----+
|A |
+----+
|null|
+----+发布于 2021-01-26 16:38:52
您需要将'.5G'放在括号中,而不是将列放在括号中。
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。
https://stackoverflow.com/questions/65895152
复制相似问题