在pyspark中逐列随机采样数据

时间:2018-06-23 09:19:45

标签: pyspark

我想通过将每一列一个接一个的洗礼来创建一个新的spark数据框架,这将成为我的合成数据。

sample_as_perc_of_orig = 75
synth_size = int(round(count_rows *sample_as_perc_of_orig/100,0))
synth_id = list(range(1,synth_size))

synth_data = spark.createDataFrame(synth_id, IntegerType())
synth_data = synth_data.selectExpr("value as ID")


for i in x_vars:
 sampled = full_data.select(i).sample(False,.80,seed).limit(synth_size).rdd.flatMap(lambda x: x).collect() 
 rel_type = xvar_ref.loc[xvar_ref['XVAR'] == i, 'TYPE'].iloc[0]
 def add_labels(colref):
     return sampled[colref-1]
 if(rel_type == "double"):
     labels_udf = udf(add_labels,FloatType())
 else:
     labels_udf = udf(add_labels,IntegerType())
 synth_data = synth_data.withColumn(i, labels_udf("ID"))


 synth_data = synth_data.withColumn('Tag', f.lit("Synthetic"))

我拥有的数据超过200万行和200列。上面的代码运行了很长时间,而且我无法在蜂巢中编写准备好的数据。有更好的方法吗?

0 个答案:

没有答案