복붙노트

[SQL] 방법 pyspark를 사용하여 일부 필드로 그룹화 된 데이터 집합 주어진에서 최대 (날짜)를 얻으려면?

SQL

방법 pyspark를 사용하여 일부 필드로 그룹화 된 데이터 집합 주어진에서 최대 (날짜)를 얻으려면?

나는 아래로 dataframe의 데이터를 가지고 :

  datetime             | userId | memberId | value |    
2016-04-06 16:36:...   | 1234   | 111      | 1
2016-04-06 17:35:...   | 1234   | 222      | 5
2016-04-06 17:50:...   | 1234   | 111      | 8
2016-04-06 18:36:...   | 1234   | 222      | 9
2016-04-05 16:36:...   | 4567   | 111      | 1
2016-04-06 17:35:...   | 4567   | 222      | 5
2016-04-06 18:50:...   | 4567   | 111      | 8
2016-04-06 19:36:...   | 4567   | 222      | 9

나는 최대 (날짜) GROUPBY 사용자 ID, MEMBERID을 찾아야합니다. 때 나는 다음과 같이 시도 :

df2 = df.groupBy('userId','memberId').max('datetime')

나는 오류로 받고 있어요 :

org.apache.spark.sql.AnalysisException: "datetime" is not a numeric
column. Aggregation function can only be applied on a numeric column.;

I는 다음과 같이 원하는 출력은 :

userId | memberId | datetime
1234   |  111     | 2016-04-06 17:50:...
1234   |  222     | 2016-04-06 18:36:...
4567   |  111     | 2016-04-06 18:50:...
4567   |  222     | 2016-04-06 19:36:...

내가 PySpark의 dataframes를 사용하여 주어진 데이터 중 최대 날짜를 얼마나 사람이 도움을 저를 기쁘게 할 수 있습니까?

해결법

  1. ==============================

    1.숫자가 아닌하지만 주문 가능한 유형의 당신은 최대 직접적으로 AGG 사용할 수 있습니다 :

    숫자가 아닌하지만 주문 가능한 유형의 당신은 최대 직접적으로 AGG 사용할 수 있습니다 :

    from pyspark.sql.functions import col, max as max_
    
    df = sc.parallelize([
        ("2016-04-06 16:36", 1234, 111, 1),
        ("2016-04-06 17:35", 1234, 111, 5),
    ]).toDF(["datetime", "userId", "memberId", "value"])
    
    (df.withColumn("datetime", col("datetime").cast("timestamp"))
        .groupBy("userId", "memberId")
        .agg(max_("datetime")))
    
    ## +------+--------+--------------------+
    ## |userId|memberId|       max(datetime)|
    ## +------+--------+--------------------+
    ## |  1234|     111|2016-04-06 17:35:...|
    ## +------+--------+--------------------+
    
  2. from https://stackoverflow.com/questions/38377894/how-to-get-maxdate-from-given-set-of-data-grouped-by-some-fields-using-pyspark by cc-by-sa and MIT license