开发者社区> 问答> 正文

使用过滤器PySpark创建一个新列

我想创建一个新列,其中包含取决于过滤器的数据帧计数。

这是一个例子:

conditions
*
*
p1==1 AND p2==1

我试过了 :

df = df.withColumn('cardinal',df.filter(conditions).count())
它不起作用

展开
收起
社区小助手 2018-12-11 18:08:52 2078 0
1 条回答
写回答
取消 提交回答
  • 社区小助手是spark中国社区的管理员,我会定期更新直播回顾等资料和文章干货,还整合了大家在钉群提出的有关spark的问题及回答。

    使用literal的df.filter功能。

    尝试使用以下语法:

    df1 = df.withColumn('cardinal',lit(df.filter(conditions).count()))
    现在df1 dataframe将cardinal添加一列。

    更新:

    我试着用简单的例子:

    import pyspark.sql.functions as F
    df=sc.parallelize([(1,1),(2,1),(3,2)]).toDF(["p1","p2"]) #createDataFrame
    conditions=((F.col('p1')==1) & (F.col('p2')==1)) #define conditions variable
    df1=df.withColumn("cardinal",F.lit(df.filter(conditions).count())) #add column

    df1.show(10,False)
    p1 p2 cardinal
    1 1 1
    2 1 1
    3 2 1

    (或者)

    不使用conditions变量

    df1=df.withColumn("cardinal",F.lit(df.filter((F.col('p1')==1) & (F.col('p2')==1)).count()))

    df1.show(10,False)
    p1 p2 cardinal
    1 1 1
    2 1 1
    3 2 1

    使用.where条款

    df1=df.withColumn("cardinal",F.lit(df.where((F.col("p1")==1) & (F.col("p2")==1)).count()))

    df1.show(10,False)
    p1 p2 cardinal
    1 1 1
    2 1 1
    3 2 1
    2019-07-17 23:19:58
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
LEARNINGS USING SPARK STREAMING & DATAFRAMES FOR WALMART SEARCH 立即下载
Spark介绍及Spark多数据源分析 立即下载
R&D To Product Pipeline Using Apache Spark in Adtech 立即下载