【发布时间】:2021-07-21 06:31:19
【问题描述】:
有一个 pyspark 源数据框有一个名为 X 的列。X 列由“-”分隔值组成。该特定列中可以有任意数量的分隔值。 下面给出的源数据框示例:
| X |
|---|
| A123-B345-C44656-D4423-E3445-F5667 |
| X123-Y345 |
| Z123-N345-T44656-M4423 |
| X123 |
现在,需要使用分隔符拆分此列,并准确提取 N=4 个单独的分隔值。如果有超过 4 个分隔值,那么我们需要前 4 个分隔值并丢弃其余的。如果分隔值少于 4 个,那么我们需要选择现有的值并用空字符“”填充其余的值。
结果输出应如下所示:
| X | Col1 | Col2 | Col3 | Col4 |
|---|---|---|---|---|
| A123-B345-C44656-D4423-E3445-F5667 | A123 | B345 | C44656 | D4423 |
| X123-Y345 | A123 | Y345 | ||
| Z123-N345-T44656-M4423 | Z123 | N345 | T44656 | M4423 |
| X123 | X123 |
按照以下代码在 python 中轻松完成此操作,但考虑使用 pyspark 方法来执行此操作:
def pad_infinite(siterable, padding=None):
return chain(iterable, repeat(padding))
def pad(iterable, size, padding=None):
return islice(pad_infinite(iterable, padding), size)
colA, colB, colC, colD= list(pad(X.split('-'), 4, ''))
【问题讨论】:
标签: pyspark apache-spark-sql user-defined-functions