如何在不聚合的情况下将熊猫群翻译为pyspark



我正在尝试将以下pandas行转换为pyspark:

df = df.groupby('ID', as_index=False).head(1)

现在,我熟悉了pyspark中的pysparkdf.groupby("col1", "col2")方法,以及以下方法来获得组中的第一个元素:

df = df.withColumn("row_num", row_number().over(Window.partitionBy("ID").orderBy("SOME_DATE_COLUMN"))).where(col("row_num") < 2)

然而,如果没有orderBy参数,对每个组中的第一个元素进行分组和获取是不起作用的(我实际上正试图从panda转换为spark,无论panda行做什么(:

调用o2547.withColumn时出错。:org.apache.spark.sql.AnalysisException:窗口函数row_number((>需要对窗口进行排序,请添加ORDER BY子句。例如>从表中选择row_number(((value_expr(OVER(PARTITION BY window_PARTITION>ORDER BY window_ordering(

查看pandas groupby文档,如果不将以下sort/agg函数应用于组,我将无法理解groupby的功能;即$.head(1($从中获取第一个元素的组中的默认顺序是什么?

这取决于groupby之前panda数据帧的顺序。来自熊猫组(按文件(:

对组密钥进行排序。关闭此选项可获得更好的性能。请注意,这不会影响每组中观察结果的顺序Groupby保留每组中的行顺序

由于pyspark数据帧没有排序,因此不可能将pandas庞然大物完全转换为pyspark。但是,如果您的数据源可以提供行号或类似的东西,这是可能的。

最新更新