随机化pyspark列值?

g9icjywg  于 2021-05-27  发布在  Spark
关注(0)|答案(1)|浏览(428)

我是pyspark编程的初学者。我在一个csv文件中有以下数据,该文件被读入sparkDataframe,并希望从一个小数据集开始生成一个大数据集。


# read the csv file in a spark dataframe

df = (spark.read
       .option("inferSchema", "true")
       .option("header", "true")
       .csv(file_path))

我想将每个列中的数据(即“invoiceno”、“stockcode”、“description”)分别无序排列,如下所示。

下面的代码是为orderby列值随机实现的-

from pyspark.sql.functions import *

df.orderBy("InvoiceNo", rand()).show(10)

我没有得到正确的输出,即使在执行上述。有人能帮忙解决这个问题吗?这个链接也被引用:在sparkrdd或dataframe中随机洗牌列,但是上面提到的代码抛出了一个错误。

ctehm74n

ctehm74n1#

皮斯帕克 rand 函数可用于在Dataframe上创建一列随机值。然后,Dataframe可以由新列排序以产生随机顺序,例如。

from pyspark.sql.functions import rand

df.withColumn('rand', rand(seed=42)).orderBy('rand')

要分别随机化每列的顺序,请分别为每列创建一个Dataframe并随机化,每个Dataframe都有一个唯一的种子,例如。

col_1_df = df.select('col_1').withColumn('rand', rand(seed=seed_1)).orderBy('rand')
col_2_df = df.select('col_2').withColumn('rand', rand(seed=seed_2)).orderBy('rand')

要用原始列重新组合Dataframe,可以添加一个行号,然后在该行号上进行连接,例如。

window = Window().orderBy(lit('A'))
col_1_with_row_num = col_1_df.withColumn("row_num", row_number().over(window))
col_1_with_row_num = col_2_df.withColumn("row_num", row_number().over(window))

col_1_with_row_num.join(col_2_with_row_num, on=['row_num']).select('col_1', 'col_2').show()

相关问题