我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对其进行排名。