PySpark获取改组/排序/排序时的行数

时间:2019-06-25 14:59:28

标签: pyspark pyspark-sql

have a pyspark issue where as通过更改数据帧的行来对数据行的行进行改组,它们的新分配取决于行的行数。但是,此行数可以随着我的进行更改。

这里有个例子。

+---+----+-------+
| ID|TYPE|ROW_NUM|
+---+----+-------+
|  A| cat|      1|
|  B| cat|      2|
|  C| cat|      3|
|  D| cat|      4|
|  E| dog|      5|
|  F| cat|      6|
|  G| cat|      7|
|  H| cat|      8|
|  I| cat|      9|
|  J| dog|     10|
+---+----+-------+

如果我们想根据其数据类型(猫或狗)对数据帧进行重新排名,但该新排名还取决于其价值低于其新提议分数的猫和狗的数量。

from pyspark.sql.types import StructType, StructField, IntegerType, DoubleType, StringType
import pyspark.sql.functions as f

temp_struct = StructType([
    StructField('ID',  StringType()),
    StructField('TYPE',  StringType()),
    StructField('ROW_NUM',    IntegerType()) # essentially the rank going in.
])


temp_df = spark.createDataFrame([
    ['A',  'cat', 1],
    ['B',  'cat', 2],
    ['C',  'cat', 3],
    ['D',  'cat', 4],
    ['E',  'dog', 5],
    ['F',  'cat', 6],
    ['G',  'cat', 7],
    ['H',  'cat', 8],
    ['I',  'cat', 9],
    ['J',  'dog', 10]
], temp_struct)

temp_df.show()

the_thing_i_am_looking_to_do = 0.01 # place holder

# where the the_thing_i_am_looking_to_do is the number of rows with a row_num <= my adjusted ADJUSTED_RANK.

temp_df.withColumn('ADJUSTED_RANK', f.when(f.col('TYPE') == 'dog', 
                                           f.col('ROW_NUM') * .2 + the_thing_i_am_looking_to_do)
                   .otherwise(f.col('ROW_NUM'))).show()

在我的情况下,并非每种类型的==狗都可以保证被更改或调整,因此我不知道进行此操作的数字或行数。

我试图在此处提高效率并避免循环,但是事实证明,要使其正常工作,这极具挑战性。

在调整完所有内容后,我将通过新的ADJUSTED_RANK对其进行排名。

0 个答案:

没有答案