pySpark从列表中添加列

2024-09-21 00:49:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个datafame,希望根据列表中的值向其中添加列

我的值列表将从3-50个值变化。我是pySpark的新手,我正在尝试将这些值作为新列(空)附加到我的df中

我已经看到了如何将[1列][1]添加到数据帧而不是列表中的多个数据帧的推荐代码

mylist = ['ConformedLeaseRecoveryTypeId', 'ConformedLeaseStatusId', 'ConformedLeaseTypeId', 'ConformedLeaseRecoveryTypeName', 'ConformedLeaseStatusName', 'ConformedLeaseTypeName']

我下面的代码只附加了一列

for new_col in mylist:
  new = datasetMatchedDomains.withColumn(new_col,f.lit(0))
new.show()




  [1]: https://stackoverflow.com/questions/48164206/pyspark-adding-a-column-from-a-list-of-values-using-a-udf

Tags: 数据代码df列表newcolpyspark新手
2条回答

您可以在循环中浏览列表,更新df:

for col_name in mylist:
    datasetMatchedDomains = datasetMatchedDomains.withColumn(col_name, lit(0))

有趣的后续行动-如果这有效,请尝试使用reduce:)

另外,关于编辑-withColumn并没有修改原始数据帧,而是每次返回一个新的数据帧,每次循环迭代都会覆盖该数据帧

我们还可以使用list comprehension.select向数据帧添加新列

Example:

#sample dataframe
df.show()
#+ -+  -+ -+ -+  +
#| _1|   _2| _3| _4|  _5|
#+ -+  -+ -+ -+  +
#|   |12343|   |9  |   0|
#+ -+  -+ -+ -+  +

mylist = ['ConformedLeaseRecoveryTypeId', 'ConformedLeaseStatusId', 'ConformedLeaseTypeId', 'ConformedLeaseRecoveryTypeName', 'ConformedLeaseStatusName', 'ConformedLeaseTypeName']

cols=[col(col_name) for col_name in df.columns] + [(lit(0)).name( col_name) for col_name in mylist]

#incase if you want to cast new fields then
cols=[col(col_name) for col_name in df.columns] + [(lit(0).cast("string")).name( col_name) for col_name in mylist]

#adding new columns and selecting existing columns    
df.select(cols).show()
#+ -+  -+ -+ -+  +              +           +          +               +            +           +
#| _1|   _2| _3| _4|  _5|ConformedLeaseRecoveryTypeId|ConformedLeaseStatusId|ConformedLeaseTypeId|ConformedLeaseRecoveryTypeName|ConformedLeaseStatusName|ConformedLeaseTypeName|
#+ -+  -+ -+ -+  +              +           +          +               +            +           +
#|   |12343|   |9  |   0|                           0|                     0|                   0|                             0|                       0|                     0|
#+ -+  -+ -+ -+  +              +           +          +               +            +           +

相关问题 更多 >

    热门问题