【问题标题】:Grouping multiple dates in Spark SQL?在 Spark SQL 中对多个日期进行分组?
【发布时间】:2019-03-21 15:47:46
【问题描述】:

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

这是我目前的代码:

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

而不是将它放在多行上。

谢谢。

所以当我尝试使用以下 distinct 函数时:

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

【问题讨论】:

  • 您的输出只有 3 列。 T.date 怎么了?请包含示例数据。
  • T.Date 对于每一行都是不同的,这就是为什么输出是这样的。删除 T.date
  • T.date 是一个不同的列,与 R.date 无关。我没有将它包含在图片中,因为它会影响它还是会影响它?
  • T.date 本质上是提示日期,R.date 是审查日期。他们是两个假设是两个不同的日期
  • 那个描述没有多大帮助。显示示例输入和预期输出。

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


【解决方案1】:

你试过选择不同的???

    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)

请分享一些数据,以便更容易为您提供帮助

【讨论】:

  • 我有,但我只尝试过不同的列。如果我区分整个表格,让我尝试看看输出是什么
  • 我刚刚尝试了您所做的,但仍有重复项。我会将图片添加到原始帖子中,以便您查看。
【解决方案2】:

从选择列表以及分组方式中删除 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
""")

【讨论】:

    猜你喜欢
    • 2023-01-04
    • 1970-01-01
    • 1970-01-01
    • 2021-02-14
    • 1970-01-01
    • 2015-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多