在PySpark 2.0中,可以使用以下步骤计算不包括周末的日期范围内的累计和:
from pyspark.sql import SparkSession
from pyspark.sql.functions import col, date_format, expr, when
from pyspark.sql.window import Window
spark = SparkSession.builder.appName("Weekday Accumulative Sum").getOrCreate()
data = [("2022-01-01", 10), ("2022-01-02", 20), ("2022-01-03", 30), ("2022-01-04", 40), ("2022-01-05", 50), ("2022-01-06", 60), ("2022-01-07", 70)]
df = spark.createDataFrame(data, ["date", "value"])
df = df.withColumn("date", col("date").cast("date"))
df = df.withColumn("weekday", date_format(col("date"), "u").cast("integer"))
windowSpec = Window.orderBy("date").rowsBetween(Window.unboundedPreceding, Window.currentRow)
df = df.withColumn("value", when((col("weekday") == 6) | (col("weekday") == 7), 0).otherwise(col("value")))
df = df.withColumn("accumulative_sum", expr("sum(value) over (partition by weekday order by date)"))
df.show()
这样,你将得到一个包含累计和的DataFrame,其中不包括周末的日期范围。
请注意,以上代码示例中没有提及具体的腾讯云产品,因为PySpark是Apache Spark的Python API,与云计算品牌商无关。但是,你可以将上述代码应用于任何支持PySpark的云计算平台,如腾讯云的EMR(Elastic MapReduce)服务,该服务提供了Spark集群的托管环境。
参考链接:
领取专属 10元无门槛券
手把手带您无忧上云