根据另一列的值更改 pyspark 列
Change a pyspark column based on the value of another column
我有一个名为 df 的 pyspark 数据框。
ONE LINE EXAMPLE:
df.take(1)
[Row(data=u'2016-12-25',nome=u'Mauro',day_type="SUN")]
我有一个假期列表:
holydays=[u'2016-12-25',u'2016-12-08'....]
如果 "data" 在节日列表中,我想将 day_type 切换到 "HOLIDAY",否则我想保留 day_type 字段。
这是我的非工作暂定:
df=df.withColumn("day_type",when(col("data") in holydays, "HOLIDAY").otherwise(col("day_type")))
PySpark 不喜欢表达式 "in holydays"。
它returns这个错误:
ValueError: Cannot convert column into bool: please use '&' for 'and', '|'
在列上使用 isin 函数而不是使用 in 子句来检查值是否存在于列表中。示例代码:
df=df.withColumn("day_type",when(df.data.isin(holydays), "HOLIDAY").otherwise(df.day_type)))
关于你的第一个问题 - 你需要 isin
:
spark.version
# u'2.2.0'
from pyspark.sql import Row
from pyspark.sql.functions import col, when
df=spark.createDataFrame([Row(data=u'2016-12-25',nome=u'Mauro',day_type="SUN")])
holydays=[u'2016-12-25',u'2016-12-08']
df.withColumn("day_type",when(col("data").isin(holydays), "HOLIDAY").otherwise(col("day_type"))).show()
# +----------+--------+-----+
# | data|day_type| nome|
# +----------+--------+-----+
# |2016-12-25| HOLIDAY|Mauro|
# +----------+--------+-----+
关于你的第二个问题 - 我没有发现任何问题:
df.withColumn("day_type",when(col("data")=='2016-12-25', "HOLIDAY").otherwise(col("day_type"))).filter("day_type='HOLIDAY'").show()
# +----------+--------+-----+
# | data|day_type| nome|
# +----------+--------+-----+
# |2016-12-25| HOLIDAY|Mauro|
# +----------+--------+-----+
顺便说一句,提供多于一行的样本数据总是一个好主意...
我有一个名为 df 的 pyspark 数据框。
ONE LINE EXAMPLE:
df.take(1)
[Row(data=u'2016-12-25',nome=u'Mauro',day_type="SUN")]
我有一个假期列表:
holydays=[u'2016-12-25',u'2016-12-08'....]
如果 "data" 在节日列表中,我想将 day_type 切换到 "HOLIDAY",否则我想保留 day_type 字段。
这是我的非工作暂定:
df=df.withColumn("day_type",when(col("data") in holydays, "HOLIDAY").otherwise(col("day_type")))
PySpark 不喜欢表达式 "in holydays"。 它returns这个错误:
ValueError: Cannot convert column into bool: please use '&' for 'and', '|'
在列上使用 isin 函数而不是使用 in 子句来检查值是否存在于列表中。示例代码:
df=df.withColumn("day_type",when(df.data.isin(holydays), "HOLIDAY").otherwise(df.day_type)))
关于你的第一个问题 - 你需要 isin
:
spark.version
# u'2.2.0'
from pyspark.sql import Row
from pyspark.sql.functions import col, when
df=spark.createDataFrame([Row(data=u'2016-12-25',nome=u'Mauro',day_type="SUN")])
holydays=[u'2016-12-25',u'2016-12-08']
df.withColumn("day_type",when(col("data").isin(holydays), "HOLIDAY").otherwise(col("day_type"))).show()
# +----------+--------+-----+
# | data|day_type| nome|
# +----------+--------+-----+
# |2016-12-25| HOLIDAY|Mauro|
# +----------+--------+-----+
关于你的第二个问题 - 我没有发现任何问题:
df.withColumn("day_type",when(col("data")=='2016-12-25', "HOLIDAY").otherwise(col("day_type"))).filter("day_type='HOLIDAY'").show()
# +----------+--------+-----+
# | data|day_type| nome|
# +----------+--------+-----+
# |2016-12-25| HOLIDAY|Mauro|
# +----------+--------+-----+
顺便说一句,提供多于一行的样本数据总是一个好主意...