Передать список в udf в фрейме данных с помощью Colum - PullRequest
0 голосов
/ 07 августа 2020

Я создаю фреймворк из таблицы улья, где мне нужно преобразовать столбец на основе нескольких столбцов в фрейме данных, для этого я построил udf и передал kwargs, однако я сомневаюсь, что порядок kwargs изменяется, поскольку порядок важен. Поэтому я решил использовать List, но изучаю, как передать несколько столбцов в виде списка из преобразования фрейма данных.

function:

val = ''
@udf(returnType = StringType())
def func(list):
   for i in list
      val = val + i
   return val

df = df.withColumn(new_col,func(df["col1"],df["col2"],df["col3"])
df.show()

Ответы [ 2 ]

0 голосов
/ 09 августа 2020

Спасибо, Smart_Coder. Приносим извинения за задержку с ответом. Позвольте мне дать вам полное требование. Я возьму фрейм данных, как вы упомянули выше в качестве примера. и я возьму 3 столбца в качестве входных данных (это должно быть Dynami c, но сейчас возьму их). col1, col2, col3 - входные столбцы для функции. значения столбцов должны перемещаться справа налево в случае нулевых или пустых значений. расширение требования: тогда мне нужно проверить количество символов в каждом значении и взять только указанные c no. символов в этот столбец, а остальные столбцы должны go в следующий столбец, если все еще больше, чем указано c количество символов, тогда остальные будут go в следующий столбец. Однако нам нужно всего 3 столбца / элемента в качестве вывода.

col1 col2 col2
ASDF QWER NMVB
     QWER NMVB
ASD       NMVB

for suppose i need only 3 characters in each field max.
output will be:
col1 col2 col3
ASD  F    QWE
QWE  R   NMV
ASD  NMV
0 голосов
/ 08 августа 2020

приведенный ниже метод динамического c столбца может решить вашу проблему.

from pyspark.sql.functions import concat
# Creating an example DataFrame
values = [('A1',11,'A3','A4'),('B1',22,'B3','B4'),('C1',33,'C3','C4')]
df = spark.createDataFrame(values,['col1','col2','col3','col4'])
df.show()

'''
+----+----+----+----+
|col1|col2|col3|col4|
+----+----+----+----+
|  A1|  11|  A3|  A4|
|  B1|  22|  B3|  B4|
|  C1|  33|  C3|  C4|
+----+----+----+----+
'''
 
col_list = ['col1','col2']
df = df.withColumn('concatenated_cols2',concat(*col_list))
col_list = ['col1','col2','col3']
df = df.withColumn('concatenated_cols3',concat(*col_list))
col_list = ['col1','col2','col3','col4']
df = df.withColumn('concatenated_cols4',concat(*col_list))
df.show()

'''
+----+----+----+----+------------------+------------------+------------------+
|col1|col2|col3|col4|concatenated_cols2|concatenated_cols3|concatenated_cols4|
+----+----+----+----+------------------+------------------+------------------+
|  A1|  11|  A3|  A4|              A111|            A111A3|          A111A3A4|
|  B1|  22|  B3|  B4|              B122|            B122B3|          B122B3B4|
|  C1|  33|  C3|  C4|              C133|            C133C3|          C133C3C4|
+----+----+----+----+------------------+------------------+------------------+
'''

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