首页 > 解决方案 > Sparksql Pyspark crossJoin over dimension / for a specific window

问题描述

这是我的数据框

df = spark.createDataFrame([("A", "2018-01-05"), ("A", "2018-02-10"), ("B", "2018-08-11"), ("B", "2018-09-11")], ("ID", "date"))

我想对其进行改造,使其看起来像这样:

+---+----------+----------+
| ID|     date1|     date2|
+---+----------+----------+
|  A|2018-01-05|2018-02-10|
|  A|2018-02-10|2018-01-05|
|  A|2018-01-05|2018-01-05|
|  A|2018-02-10|2018-02-10|
|  B|2018-08-11|2018-09-11|
|  B|2018-09-11|2018-08-11|
|  B|2018-08-11|2018-08-11|
|  B|2018-09-11|2018-09-11|
+---+----------+----------+

所以基本上我需要做一个 crossJoin 但只针对与特定 ID 关联的值。这可能吗?有任何想法吗?也许通过窗口函数?

标签: apache-sparkpysparkapache-spark-sql

解决方案


解决方案是

df.join(df, ["ID"]).toDF("id", "date1", "date2").show()

结果是

+---+----------+----------+                                                     
| id|     date1|     date2|
+---+----------+----------+
|  B|2018-08-11|2018-08-11|
|  B|2018-08-11|2018-09-11|
|  B|2018-09-11|2018-08-11|
|  B|2018-09-11|2018-09-11|
|  A|2018-01-05|2018-01-05|
|  A|2018-01-05|2018-02-10|
|  A|2018-02-10|2018-01-05|
|  A|2018-02-10|2018-02-10|
+---+----------+----------+

推荐阅读