簡體   English   中英

使用 Colum 將列表傳遞給 dataframe 中的 udf

[英]Pass list to udf in dataframe with Colum

我正在從 hive 表中構建 dataframe,我需要根據 dataframe 中的多個列來轉換列,因為我懷疑我構建 udf 和傳遞 kwar kwarg 的順序很重要。 所以我決定使用列表,但我正在探索如何從 dataframe 轉換中將多個列作為列表傳遞。

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()

下面的動態列方法可能會解決您的問題。

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|
+----+----+----+----+------------------+------------------+------------------+
'''

感謝 Smart_Coder。 很抱歉延遲回復您。 讓我給你的全部要求。 我將以上面提到的 dataframe 為例。 我將采用 3 列作為輸入(它應該是動態的,但現在將采用這些列)。 col1、col2、col3 是 function.columns 的輸入列。如果是 null 或空值,列值應從右向左移動。 要求的擴展:那么我需要檢查每個值中的字符數,並且只取特定的編號。 of characters into that column and rest of the columns should go into next column, if still it is ore than specific number of characters then rest will go into next column. 但是,我們只需要 3 列/元素作為 output。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM