如何将随机转换应用于 Spark 中的 DataFrame 列?

How to apply a randomized transformation to a DataFrame column in Spark?

我在 CSV 文件中有以下格式的两个数据框:

数据

col1  value
a1    100
a2    200
a3    250
a2    1
a1    10
a3    510
...

费率

id    target    rate
a1    x1        .5
a1    x2        .5
a2    x3        .2
a2    x2        .2
a2    x4        .6
a3    x5        1

文件通过以下方法读取

data_df = sqlContext.read.format('com.databricks.spark.csv').options(header='true').load(data_filepath)

rate_df = sqlContext.read.format('com.databricks.spark.csv').options(header='true').load(rate_filepath)

作为下一步,我想对 data_df 应用转换以生成如下数据框:

决赛

col1  value
x2    100
x3    200
x5    250
x2    1
x2    10
x5    510
...

基本上,对于 col1 table 中的每个值,我想 运行 基于 rates 数据框的独立随机模拟。因此,在上面的示例中,第一个条目是 a1,因此根据比率 df,它有 50% 的机会成为 x1,有 50% 的机会成为 x2 等等。

鉴于我正在使用 PySpark 数据框对象,我该如何实现此功能?

要么我没有完全按照,要么你的最终输出有一些错误。无论哪种方式,这都应该让你到达你需要的地方

data.join(rate, data.col1 == rate.id)
  .rdd.map(lambda row: (row.id, (row.value, row.target, row.rate))
  .groupByKey()
  .map(lambda (k, v): RandomOperation(v))

其中 RandomOperation 需要 Iterable 个对象 (value, target, rate)。只需运行你的随机操作和return你想要的。