![](/img/trans.png)
[英]PySpark - Pass list as parameter to UDF + iterative dataframe column addition
[英]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.