apache-spark - 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
您的及时回复将不胜感激。
解决方案
在我看来,您的问题根本不需要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|
#+----+----+-----------+
推荐阅读
- node.js - 从子目录访问配置模块
- python - 在 tkinter python 中同时绑定到 2 个事件
- javascript - props vue js的问题。第二个元素不起作用
- flutter - Flutter - Draggable 小部件的反馈没有正确动画
- google-apps-script - GCalendar 在我的完整日历/完整日历中搜索
- laravel - Laravel刀片模板:检查记录存在于数据透视表中
- java - 使用嵌入式 Artemis 对 JMS 2.0 进行单元测试
- python - python openCV编解码器信息
- python - 在 python 中使用超几何测试
- sql - 如果表中不存在列值,如何默认返回 0