Лямбда-функция в pyspark не работает с кодом Python - PullRequest
0 голосов
/ 14 сентября 2018

Я написал код на 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

Ваш быстрый ответ будет высоко оценен.

1 Ответ

0 голосов
/ 14 сентября 2018

На мой взгляд, ваша проблема вообще не требует 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|
#+----+----+-----------+
...