本文介绍了Sparksql Pyspark crossJoin over 维度/针对特定窗口的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是我的数据框

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 关联的值.这可能吗?有任何想法吗?也许通过窗口函数?

So basically I need to do a crossJoin but only for the values associated with a specific ID. Is this possible? Any ideas? Maybe through a window function?

推荐答案

解决方案是

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|
+---+----------+----------+

这篇关于Sparksql Pyspark crossJoin over 维度/针对特定窗口的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-27 21:44