我在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对象,我该如何实现此功能?
答案 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)
。只需运行随机操作并返回您想要的内容。