在Spark SQL中将多个日期分组?

时间:2018-10-17 03:22:16

标签: sql sql-server apache-spark pyspark pyspark-sql

我无法在代码中对日期进行分组。

到目前为止,这是我的代码:

df_tipReview = spark.sql("""
SELECT R.user_id, R.date, COUNT(R.review_id), T.date
FROM reviews AS R INNER JOIN tips AS T
ON R.user_id = T.user_id
GROUP BY R.date, T.date, R.user_id
""")
df_tipReview.show(truncate=False)

输出:

https://i.stack.imgur.com/5EQMe.png

如您所见,相同的user_id列出了相同的日期,我将如何在Spark SQL中汇总该日期,以便使其基本看起来像:

|-55DgUo52I3zW9RxkZ-EAQ|2015-11-11| 3

而不是多行显示。

谢谢。

因此,当我尝试使用以下独特功能时:

df_tipReview = spark.sql("""
SELECT DISTINCT R.user_id, R.date, COUNT(R.review_id), T.date
FROM reviews AS R INNER JOIN tips AS T
ON R.user_id = T.user_id
GROUP BY R.user_id, R.date, T.date
""")
df_tipReview.filter("R.user_id='-55DgUo52I3zW9RxkZ-EAQ'").show(truncate=False)

这是输出: https://i.stack.imgur.com/ercES.png

2 个答案:

答案 0 :(得分:0)

您尝试过选择独特吗?

    df_tipReview = spark.sql("""
    SELECT Distinct R.user_id, R.date, COUNT(R.review_id), T.date
    FROM reviews AS R INNER JOIN tips AS T
    ON R.user_id = T.user_id
    GROUP BY R.date, T.date, R.user_id
    """)
    df_tipReview.show(truncate=False)

请分享一些数据,以便更轻松地为您提供帮助

答案 1 :(得分:0)

从选择列表以及分组依据中删除T.date 从预期结果来看,似乎您不需要选择列表中的T.date

df_tipReview = spark.sql("""
SELECT R.user_id, R.date, COUNT(R.review_id) as cnt
FROM reviews AS R INNER JOIN tips AS T
ON R.user_id = T.user_id
GROUP BY R.date, R.user_id
""")