首页 > 解决方案 > pyspark中的Lambda函数不适用于python代码

问题描述

我已经用 python 编写了代码,我正在尝试迁移到 PySpark 但面临语法问题。有人可以查看我下面的 Python 代码并协助在pySpark.

data_pit['Was_or_is_Active_Curr_FY'] = data_pit['Termination_Date'].apply(\
    lambda x: 'Y' if pd.isnull(x) or x > datetime.date(2017, 4, 1) else 'N')

data_pit = data_pit[(data_pit['Was_or_is_Active_Curr_FY']=='Y')]
data_pit.drop(columns=['Was_or_is_Active_Curr_FY'], inplace=True)

data_pit是一张表,'Termination_date'也是一列。

我试过下面的代码: -

data_pit['Was_or_is_Active_Curr_FY']=data_pit.map(lambda x:'Y' if col.("Termination_Date")isNull or col.("Termination_Date") > datetime(2017, 4, 1) else 'N' )

我的代码出现以下错误:-

SyntaxError: invalid syntax
  File "<command-10442673922623>", line 1
    data_pit['Was_or_is_Active_Curr_FY']=data_pit.map(lambda x:'Y' if col.("Termination_Date")isNull or col.("Termination_Date") > datetime(2017, 4, 1) else 'N' )
                                                                          ^
SyntaxError: invalid syntax

您的及时回复将不胜感激。

标签: apache-sparkmachine-learningpysparkdata-sciencepyspark-sql

解决方案


在我看来,您的问题根本不需要map。如果您只想创建一个新列Was_or_is_Active_Curr_FY并确定是否设置了终止日期以及它是否大于您可以使用的其他日期withColumn

data_pit.withColumn("Was_or_is_Active_Curr_FY", when((col("Termination_Date").isNull()) | (col("Termination_Date") >  datetime.date(2017, 4, 1)), "Y").otherwise("N"))

我有一个小例子,它使用不同的数据但做类似的事情。它基于是否满足两个条件"Y"的事实添加了一个列。"N"col1

test_df = spark.createDataFrame([
    (1,"2"),(3,"4"),(10,"11"),              
    ], ("col1","col2"))

test_df.withColumn("your_result", when((col("col1")==1) | (col("col1")==3), "Y").otherwise("N")).show()

#+----+----+-----------+
#|col1|col2|your_result|
#+----+----+-----------+
#|   1|   2|          Y|
#|   3|   4|          Y|
#|  10|  11|          N|
#+----+----+-----------+

推荐阅读