在pyspark Dataframe中添加一个新列(替代.apply in.DF)

在pyspark Dataframe中添加一个新列(替代.apply in.DF),pyspark,Pyspark,我有一个pyspark.sql.DataFrame.DataFramedf id col1 1 abc 公元前2年 3拉尔 4 bac 我想在df中再添加一列标志,这样如果id是奇数no,标志应该是“奇数”,如果是偶数“偶数” 最终输出应为 id col1标志 1 abc奇数 2 bcd偶数 3奇数 4巴偶数 我试过: def myfunc(num): 如果num%2==0: flag='偶数' 其他: flag=‘奇数’ 返回标志 df['new_col']=df['id'].map(la

我有一个pyspark.sql.DataFrame.DataFramedf

id col1
1 abc
公元前2年
3拉尔
4 bac
我想在df中再添加一列标志,这样如果id是奇数no,标志应该是“奇数”,如果是偶数“偶数”

最终输出应为

id col1标志
1 abc奇数
2 bcd偶数
3奇数
4巴偶数
我试过:

def myfunc(num):
如果num%2==0:
flag='偶数'
其他:
flag=‘奇数’
返回标志
df['new_col']=df['id'].map(lambda x:myfunc(x))
df['new_col']=df['id'].apply(lambda x:myfunc(x))
它给了我一个错误:
TypeError:“Column”对象不可调用


如何使用。pyspark中的apply(正如我在pandas dataframe中使用的)不提供apply,另一种方法是使用
with column
函数。使用
withColumn
执行此操作

从pyspark.sql导入函数为F
df=sqlContext.createDataFrame([
[1,“abc”],
[2,“bcd”],
[3,“lal”],
[4,“bac”]
],
[“id”,“col1”]
)
df.show()
+---+----+
|id | col1|
+---+----+
|1 | abc|
|2 | bcd|
|3 |拉尔|
|4 | bac|
+---+----+
df.withColumn(
“旗帜”,
F.when(F.col(“id”)%2==0,F.lit(“偶数”)。否则(
F.lit(“奇数”))
).show()
+---+----+----+
|id | col1 |标志|
+---+----+----+
|1 | abc |奇数|
|2 | bcd |偶数|
|3 |拉尔|奇数|
|4 | bac |偶数|
+---+----+----+

是否有方法使用函数(myfunc)和.apply的替代方法?因为在未来,我将处理其他UDF的问题,而不仅仅是奇怪的问题/even@Shubham一般来说,如果可能的话最好避免UDF,因为UDF速度较慢。但是,在您的情况下,您可以简单地使用column('flag',F.udf(myfunc,StringType())(“id”)执行
df=df.withColumn('flag',F.udf(myfunc,StringType())。通过谷歌搜索pyspark udf示例了解更多信息。@pault是对的。但是如果你想用udf来解释,我可以给你举个例子。@RakeshKumar是的,你能用udf在答案中加上这个例子吗,它将非常有用