【发布时间】:2018-10-01 19:15:27
【问题描述】:
转换给定的 spark 数据帧(Spark 版本 2.0,scala 2.11),
A B
a 2*Z12*CA9*ThisnThat10*51827630323*fa2
b 1*C7*Friends5*names1*O2
c 4*19456*helpme6*please
d 2*M13*fin2*na2*325*123456*fancy2
转换为以下格式(在 scala 或 pyspark 中)。
A B
a Z1*CA*ThisnThat*5182763032*fa2
b C*Friends*names*O
c 1945*helpme*please
d M1*fin*na*32*12345*fancy2
使用的逻辑 - 在每一行中,使用第一个数值作为下一个值的子串。使用剩余的数字部分提取下一个值,依此类推....
例如对于第一个字符串
(2*Z12*CA9*ThisnThat10*51827630323*fa2) -
* Use the first 2 to break 'Z12' into 'Z1' (two characters) with 2 remaining.
* Use this 2 to break 'CA9' into 'CA' (two characters) with 9 remaining.
* Use this 9 to break 'ThisnThat10' into 'ThisnThat' (9 characters) and 10.
* Use the 10 to break '51827630323' into '5182763032' (10 characters) and 3.
* Use the 3 to break 'fa2' into 'fa2' (3 characters).
我可以拆分字符串并创建具有动态列数的宽数据框 - 但我无法找出用于缩短字符串的 UDF。
【问题讨论】:
标签: arrays regex scala apache-spark dataframe