Как перевернуть и объединить строковые столбцы в кадре данных spark? - PullRequest
0 голосов
/ 19 июня 2019

Я использую pyspark версии 2.4, и я пытаюсь написать udf, который должен взять значения столбца id1 и столбца id2 вместе и вернуть его обратную строку.

Например, мои данные выглядят так:

+---+---+
|id1|id2|
+---+---+
|  a|one|
|  b|two|
+---+---+

соответствующий код:

df = spark.createDataFrame([['a', 'one'], ['b', 'two']], ['id1', 'id2'])

Возвращаемое значение должно быть

+---+---+----+
|id1|id2| val|
+---+---+----+
|  a|one|enoa|
|  b|two|owtb|
+---+---+----+

Мой код:

@udf(string)
def reverse_value(value):
  return value[::-1]

df.withColumn('val', reverse_value(lit('id1' + 'id2')))

Мои ошибки:

TypeError: Invalid argument, not a string or column: <function 
reverse_value at 0x0000010E6D860B70> of type <class 'function'>. For
column literals, use 'lit', 'array', 'struct' or 'create_map'
function.

Ответы [ 2 ]

1 голос
/ 19 июня 2019

Ответ @ user11669673 объясняет, что не так с вашим кодом и как исправить udf. Тем не менее, вам не нужно udf для этого.

Вы достигнете гораздо лучшей производительности , используя pyspark.sql.functions.reverse:

from pyspark.sql.functions import col, concat, reverse
df.withColumn("val", concat(reverse(col("id2")), col("id1"))).show()
#+---+---+----+
#|id1|id2| val|
#+---+---+----+
#|  a|one|enoa|
#|  b|two|owtb|
#+---+---+----+
0 голосов
/ 19 июня 2019

Должно быть:

from pyspark.sql.functions import col, concat

df.withColumn('val', reverse_value(concat(col('id1'), col('id2'))))

Объяснение:

Кроме того, неясно, верен ли аргумент udf,Это должно быть:

from pyspark.sql.functions import udf

@udf
def reverse_value(value):
    ...

или

@udf("string")
def reverse_value(value):
    ...

или

from pyspark.sql.types import StringType

@udf(StringType())
def reverse_value(value):
    ...

Кроме того, трассировка стека предполагает, что у вас есть другие проблемы в вашем коде, не воспроизводимыес фрагментом, которым вы поделились - reverse_value, кажется, возвращает function.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...