本文介绍了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 维度/针对特定窗口的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!