如何将随机转换应用于 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你想要的。
我在 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你想要的。