我想通过将每一列一个接一个的洗礼来创建一个新的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列。上面的代码运行了很长时间,而且我无法在蜂巢中编写准备好的数据。有更好的方法吗?