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

时间:2015-07-09 21:00:51

标签: python apache-spark pyspark

我在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表中的每个值,我想基于 rates 数据帧运行独立的随机模拟。因此,在第一个条目的上面的例子中,a1是基于速率的,因为它有50%的几率成为x1,有50%的几率成为x2等。

如果我正在使用PySpark Data Frame对象,我该如何实现此功能?

1 个答案:

答案 0 :(得分:0)

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

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)。只需运行随机操作并返回您想要的内容。