Как заменить строку в столбце данных Pyspark из другого столбца в Dataframe - PullRequest
0 голосов
/ 09 января 2020

Эксперты, это незначительно, но я не могу просто сделать это правильно.

+--------------+----------------------------------------------------------+-------------------+
|table         |query                                                     |date               |
+--------------+----------------------------------------------------------+-------------------+
|AGENT         |select * from table where DW_EFFECTIVE_DATE_PARTITION ='X'|2019-12-24 00:00:00|
+--------------+----------------------------------------------------------+-------------------+

Все, что я хочу в этом кадре данных, это изменить запрос столбца на -

select * from table where DW_EFFECTIVE_DATE_PARTITION ='2019-12-24 00:00:00'

Я попробовал-

>>> dfX.withColumn('query',regexp_replace('query',"'X'","'" + dfX['d'] + "'")).show()
Traceback (most recent call last):
TypeError: 'Column' object is not callable

Желаемый вывод-

+--------------+----------------------------------------------------------------------------+-------------------+
|table         |query                                                                       |date             |
+--------------+----------------------------------------------------------------------------+-------------------+
|AGENT         |select * from table where DW_EFFECTIVE_DATE_PARTITION ='2019-12-24 00:00:00'|2019-12-24 00:00:00|
+--------------+----------------------------------------------------------------------------+-------------------+

Ответы [ 2 ]

2 голосов
/ 10 января 2020

Вы можете использовать selectExpr вместо withColumn:

>>> df.selectExpr("table","regexp_replace(query, 'X', date) as query", "date").show(truncate=False)
+-----+----------------------------------------------------------------------------+-------------------+
|table|query                                                                       |date               |
+-----+----------------------------------------------------------------------------+-------------------+
|AGENT|select * from table where DW_EFFECTIVE_DATE_PARTITION ='2019-12-24 00:00:00'|2019-12-24 00:00:00|
+-----+----------------------------------------------------------------------------+-------------------+
1 голос
/ 10 января 2020

Используйте regexp_replace с expr, чтобы вы могли заменить строку другим значением столбца:

replace_expr = """regexp_replace(query,"'X'",concat("'", date, "'"))"""
df.withColumn("query", expr(replace_expr)).show(truncate=False)

Дает:

+-----+----------------------------------------------------------------------------+-------------------+
|table|query                                                                       |date               |
+-----+----------------------------------------------------------------------------+-------------------+
|AGENT|select * from table where DW_EFFECTIVE_DATE_PARTITION ='2019-12-24 00:00:00'|2019-12-24 00:00:00|
+-----+----------------------------------------------------------------------------+-------------------+
...