Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dataframe 基于上个月和上一年筛选spark数据帧_Dataframe_Apache Spark_Pyspark_Apache Spark Sql - Fatal编程技术网

Dataframe 基于上个月和上一年筛选spark数据帧

Dataframe 基于上个月和上一年筛选spark数据帧,dataframe,apache-spark,pyspark,apache-spark-sql,Dataframe,Apache Spark,Pyspark,Apache Spark Sql,我有下面的spark数据帧/数据集 Column_A Column_B 2020-12-31 1 2020-11-02 2 2020-10-01 3 2021-02-01 4 2021-01-05 5 2021-02-10 6 2021-02-11 7 2021-02-26 8 2021-03-01 9 我必须过滤并只保留那些从脚本执行之日起属于上个月的记录 假设我在2021年1月1日执行spark程序,输出数据帧应该只有2020年12月的记录。如果我今天(3月1日)执行它,那么它应该返回

我有下面的spark数据帧/数据集

Column_A   Column_B
2020-12-31 1
2020-11-02 2
2020-10-01 3
2021-02-01 4
2021-01-05 5
2021-02-10 6
2021-02-11 7
2021-02-26 8
2021-03-01 9
我必须过滤并只保留那些从脚本执行之日起属于上个月的记录

假设我在2021年1月1日执行spark程序,输出数据帧应该只有2020年12月的记录。如果我今天(3月1日)执行它,那么它应该返回2021年2月以来的所有行

预期产出:

Column_A   Column_B
2021-02-01 4
2021-02-10 6
2021-02-11 7
2021-02-26 8

如何在pyspark中实现这一点。

您可以使用
当前日期
添加月份
功能进行过滤:

from pyspark.sql import functions as F

df1 = df.filter(
    (F.month(F.col("Column_A")) == F.month(F.add_months(F.current_date(), -1))) &
    (F.year(F.col("Column_A")) == F.year(F.add_months(F.current_date(), -1)))
)

df1.show()
#+----------+--------+
#|  Column_A|Column_B|
#+----------+--------+
#|2021-02-01|       4|
#|2021-02-10|       6|
#|2021-02-11|       7|
#|2021-02-26|       8|
#+----------+--------+
使用
日期\u格式

df1 = df.filter(
    F.date_format(F.col("Column_A"), "yyyyMM") == F.date_format(F.add_months(F.current_date(), -1), "yyyyMM")
)
使用
日期\u trunc

df1 = df.filter(
    F.date_trunc("month", F.col("Column_A")) == F.date_trunc("month", F.add_months(F.current_date(), -1))
)