<p>如果您希望得到与您的问题完全相同的结果,<code>OneHotEstimatorEncoder</code>如果没有其他一些奇特的映射技巧,将无法工作。你知道吗</p>
<p>我会在这里使用连接:</p>
<pre><code>age_buckets = [20, 24, 27, 30]
bins = list(zip(age_buckets, age_buckets[1:]))
data = [[i] + ['({0}-{1}]'.format(*bin_endpoints)] + [0] * i + [1] + [0] * (len(bins) - i - 1)
for i, bin_endpoints in enumerate(bins)]
schema = ', '.join('age_bucket_{}_{}: int'.format(start, end)
for start, end in zip(age_buckets, age_buckets[1:]))
join_df = spark.createDataFrame(data, 'age_bucket: int, age_bucket_string: string, ' + schema)
result = (df1.join(join_df, on='age_bucket', how='left')
.drop('age_bucket')
.withColumnRenamed('age_bucket_string', 'age_bucket')
.orderBy('id'))
result.show()
</code></pre>
<p>输出:</p>
<pre><code>+ -+ -+ + + + +
| id|Age|age_bucket|age_bucket_20_24|age_bucket_24_27|age_bucket_27_30|
+ -+ -+ + + + +
| 1| 30| (27-30]| 0| 0| 1|
| 2| 25| (24-27]| 0| 1| 0|
| 3| 21| (20-24]| 1| 0| 0|
+ -+ -+ + + + +
</code></pre>