PySpark Dataframe中的重复行基于另一列中的off值
我有一个如下所示的数据帧:PySpark Dataframe中的重复行基于另一列中的off值,dataframe,duplicates,pyspark,Dataframe,Duplicates,Pyspark,我有一个如下所示的数据帧: ID NumRecords 123 2 456 1 789 3 我想创建一个新的数据帧,它连接两列并根据NumRecords中的值复制行 所以输出应该是 ID_New 123-1 ID_New 123-2 ID_New 456-1 ID_New 789-1 ID_New 789-2 ID_New 789-3 我正在研究“explode”函数,但根据我看到的示例,它似乎只取了一个常量 您可以使用udf from pyspark.sql.
ID NumRecords
123 2
456 1
789 3
我想创建一个新的数据帧,它连接两列并根据NumRecords中的值复制行
所以输出应该是
ID_New 123-1
ID_New 123-2
ID_New 456-1
ID_New 789-1
ID_New 789-2
ID_New 789-3
我正在研究“explode”函数,但根据我看到的示例,它似乎只取了一个常量 您可以使用udf
from pyspark.sql.functions import udf, explode, concat_ws
from pyspark.sql.types import *
range_ = udf(lambda x: [str(y) for y in range(1, x + 1)], ArrayType(StringType()))
df.withColumn("records", range_("NumRecords") \
.withColumn("record", explode("records")) \
.withColumn("ID_New", concat_ws("-", "id", "record"))
我有一个类似的问题,这段代码将根据NumRecords列中的值复制行:
from pyspark.sql import Row
def duplicate_function(row):
data = [] # list of rows to return
to_duplicate = float(row["NumRecords"])
i = 0
while i < to_duplicate:
row_dict = row.asDict() # convert a Spark Row object to a Python dictionary
row_dict["SERIAL_NO"] = str(i)
new_row = Row(**row_dict) # create a Spark Row object based on a Python dictionary
to_return.append(new_row) # adds this Row to the list
i += 1
return data # returns the final list
# create final dataset based on value in NumRecords column
df_flatmap = df_input.rdd.flatMap(duplicate_function).toDF(df_input.schema)
从pyspark.sql导入行
def复制_功能(世界其他地区):
数据=[]#要返回的行列表
to_duplicate=浮动(行[“NumRecords”])
i=0
当我
我在df.withColumn(“记录”,range(“NumRecords”)上得到了“tuple对象不可调用”