【问题标题】:Random sample from column of ArrayType Pyspark来自 ArrayType Pyspark 列的随机样本
【发布时间】:2020-02-11 19:47:15
【问题描述】:

我在 Pyspark 数据框中有一列,其结构类似于

Column1
[a,b,c,d,e]
[c,b,d,f,g,h,i,p,l,m]

我想返回另一列,随机选择每行中的每个数组,函数中指定的数量。

类似data.withColumn("sample", SOME_FUNCTION("column1", 5)) 的返回:

sample
[a,b,c,d,e]
[c,b,h,i,p]

希望避免使用 python UDF,感觉应该有一个可用的函数??

这行得通:

import random
def random_sample(population):
    return(random.sample(population, 5))

udf_random = F.udf(random_sample, T.ArrayType(T.StringType()))
df.withColumn("sample", udf_random("column1")).show()

但正如我所说,最好避免使用 UDF。

【问题讨论】:

    标签: arrays random pyspark sample


    【解决方案1】:

    对于 spark 2.4+,使用 shuffleslice

    df = spark.createDataFrame([(list('abcde'),),(list('cbdfghiplm'),)],['column1'])
    
    df.selectExpr('slice(shuffle(column1),1,5)').show()
    +-----------------------------+
    |slice(shuffle(column1), 1, 5)|
    +-----------------------------+
    |              [b, a, e, d, c]|
    |              [h, f, d, l, m]|
    +-----------------------------+
    

    【讨论】:

      猜你喜欢
      • 2019-01-12
      • 1970-01-01
      • 1970-01-01
      • 2020-09-08
      • 2014-11-05
      • 1970-01-01
      • 1970-01-01
      • 2015-10-19
      • 1970-01-01
      相关资源
      最近更新 更多