Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark pyspark选择具有更多匹配列字段的特定行_Apache Spark_Pyspark_Pyspark Sql - Fatal编程技术网

Apache spark pyspark选择具有更多匹配列字段的特定行

Apache spark pyspark选择具有更多匹配列字段的特定行,apache-spark,pyspark,pyspark-sql,Apache Spark,Pyspark,Pyspark Sql,我有下面这样的示例表(我有100万这样的行),其中我需要根据下面的条件选择要新建dataframe的行 我必须选择参加过更多课程的前1000名学生 与其他学生相比,前1000名学生上1、2、3、4班的次数更多 因此,在我的示例中,我需要将student123和678的所有行存储到其他数据帧中 我找不到正确的逻辑 以下是您问题的解决方案,请让我知道这对您是否有帮助 import pyspark.sql.functions as F from pyspark.sql import Window a

我有下面这样的示例表(我有100万这样的行),其中我需要根据下面的条件选择要新建dataframe的行

  • 我必须选择参加过更多课程的前1000名学生

  • 与其他学生相比,前1000名学生上1、2、3、4班的次数更多

  • 因此,在我的示例中,我需要将student123678的所有行存储到其他数据帧中

    我找不到正确的逻辑


    以下是您问题的解决方案,请让我知道这对您是否有帮助

    import pyspark.sql.functions as F
    from pyspark.sql import Window
    
    attended_more_classes = df.filter(
        F.col("check_in") == "y"
    ).groupby(
        "id"
    ).agg(
        F.countDistinct(F.col("class")).alias("class_count")
    )
    
    win = Window.partitionBy("id").orderBy(F.col("class_count").desc())
    
    attended_more_classes = attended_more_classes.withColumn(
        "rank",
        F.rank().over(win)
    ).withColumn(
        "attended_more_class",
        F.when(
            F.col("rank")<=1000,
            F.lit("Y")
        )
    )
    
    # result of first part
    attended_more_classes.show()
    
    # answer start for second question
    
    win2 = Window.partitionBy("id", "class").orderBy(F.col("class_count").desc())
    
    filtered_students = df.filter(F.col("class").isin(1,2,3,4)).select("id").distinct()
    
    aggregated_data2 = df.filter(
        F.col("check_in") == "y"
    ).groupby(
        "id",
        "class"
    ).agg(
        F.count(F.col("check_in")).alias("class_count")
    ).withColumn(
        "max_class",
        F.first(F.col("class")).over(win)
    )
    
    attend_more_class2 = aggregated_data2.join(
        filtered_students,
        on = "id",
        how = "inner"
    )
    
    attend_more_class23 = aggregated_data2.filter(
        F.col("max_class").isin(1,2,3,4)
    ).withColumn(
        "rank",
        F.rank().over(win2)
    ).withColumn(
        "attended_more_class",
        F.when(
            F.col("rank")<=1000,
            F.lit("Y")
        )
    )
    
    # answer of second part
    attend_more_class23.show()
    
    导入pyspark.sql.F函数
    从pyspark.sql导入窗口
    有人参加的课程=df.filter(
    F.col(“签入”)=“y”
    ).群比(
    “id”
    )阿格先生(
    F.countDistinct(F.col(“类”))。别名(“类计数”)
    )
    win=Window.partitionBy(“id”).orderBy(F.col(“class_count”).desc())
    有人参加的课程=有人参加的课程。withColumn(
    “等级”,
    F.排名()超过(获胜)
    ).withColumn(
    “参加了更多的课程”,
    F.什么时候(
    F.上校(“军衔”)