2015-07-09 63 views
0

我在CSV文件的格式如下两个数据帧:如何将随机化转换应用于Spark中的DataFrame列?

数据

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) 

​​

作为下一个步骤,我想变换应用于data_df以生成等的数据帧:在COL1表我基本上

最终

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

,为每个值想要运行基于速率数据帧的独立随机模拟。因此,在第一个条目的上面的例子中,a1是基于费率df的,它有50%的机会成为x1,50%的机会成为x2等。

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

回答

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需要的对象(value, target, rate)Iterable。只需运行你的随机操作并返回你想要的。

相关问题