在火花数据帧的不同行上应用不同的过滤器

Posted

技术标签:

【中文标题】在火花数据帧的不同行上应用不同的过滤器【英文标题】:Applying different filters on different rows of a spark dataframe 【发布时间】:2020-05-11 12:37:40 【问题描述】:

我有一个包含 5 列 ColA、ColB、country、start_time、end_time 的数据框。在进行以下处理后,我需要从现有的 df 形成一个新的 df

  If df.country == US then we have to do df.filter(start_time < todays date)

  For remaining countries we have to do df.filter(end_time < todays date)

【问题讨论】:

您好,欢迎来到 ***。这对我来说似乎是一些家庭作业,所以请看How do I ask and answer homework questions?。给出了伪代码,那么你尝试了什么,你在哪里卡住了?问题本身并没有显示出任何努力或任何研究。如果您不编辑此问题,它可能很快就会关闭。 【参考方案1】:

您可以通过应用两个过滤器来做到这一点,首先是国家,然后是日期

df.filter(((f.col('country')=='US') & (f.col('start_time')<datetime.datetime.now())) |
          ((f.col('country')!='US') & (f.col('end_time')<datetime.datetime.now())))

【讨论】:

但是你想过滤数据......当你想根据这些列值创建新列时可以使用case

以上是关于在火花数据帧的不同行上应用不同的过滤器的主要内容,如果未能解决你的问题,请参考以下文章

火花,在DataFrame(或RDD)上多次应用过滤器,而没有多余的评估

为啥过滤器默认在火花数据帧上删除空值?

火花可重复/确定性结果

在过滤损坏的记录字段时,Spark 的 .count() 函数与数据帧的内容不同

Databricks 火花 UDF 不适用于过滤的数据帧

如何将具有不同时区的 tz_convert 应用于熊猫数据框中的不同行