我有以下测试数据,必须借助pyspark检查以下语句(数据实际上非常大:700000笔交易,每笔交易有10+个产品):
import pandas as pd
import datetime
data = {'date': ['2014-01-01', '2014-01-02', '2014-01-03', '2014-01-04', '2014-01-05', '2014-01-06'],
'customerid': [1, 2, 2, 3, 4, 3], 'productids': ['A;B', 'D;E', 'H;X', 'P;Q;G', 'S;T;U', 'C;G']}
data = pd.DataFrame(data)
data['date'] = pd.to_datetime(data['date'])
“某个客户 ID 在 x 天内存在的交易的特征是购物车中至少有一件相同的产品。”
到目前为止,我有以下方法(例如 x = 2):
spark = SparkSession.builder \
.master('local[*]') \
.config("spark.driver.memory", "500g") \
.appName('my-pandasToSparkDF-app') \
.getOrCreate()
spark.conf.set("spark.sql.execution.arrow.enabled", "true")
spark.sparkContext.setLogLevel("OFF")
df=spark.createDataFrame(data)
x = 2
win = Window().partitionBy('customerid').orderBy(F.col("date").cast("long")).rangeBetween(-(86400*x), Window.currentRow)
test = df.withColumn("productids", F.array_distinct(F.split("productids", "\;")))\
.withColumn("flat_col", F.array_distinct(F.flatten((F.collect_list("productids").over(win))))).orderBy(F.col("date"))
test = test.toPandas()
因此,从我们查看过去 2 天的每笔交易中,按 customerid 分组,相应的产品汇总在“flat_col”列中。
但我真正需要的是相同ID的购物篮的交集。只有这样我才能判断是否有常见的产品。
因此,“flat_col”的第五行中应该有 ['G'],而不是 ['P', 'Q', 'G', 'C']。同样,[] 应该出现在“flat_col”的所有其他行中。
太感谢了!
互换的青春
呼唤远方
相关分类