将字符串转换为嵌套数组-PySpark

时间:2018-07-11 21:26:26

标签: python arrays regex python-2.7 pyspark

我有一个带有以下字符串数据的PySpark DataFrame列:

[[Closed], [10:30am-11:30am, 12:30pm-1:30pm, 7:00pm-8:00pm], [12:30pm-1:30pm, 6:00pm-7:00pm, 7:30pm-8:30pm], [10:30am-11:30am, 12:30pm-1:30pm, 7:00pm-8:00pm], [12:30pm-1:30pm, 6:00pm-7:00pm], [12:30pm-1:30pm, 7:00pm-8:00pm], [10:00am-11:00am, 12:00pm-1:00pm]]

它是一个字符串,但理想情况下应为包含7个元素的数组(周日至周六)。

我想将此列转换为数组,因此可以访问第0个元素:

[Closed]

第一个元素:

[10:30am-11:30am, 12:30pm-1:30pm, 7:00pm-8:00pm]

第二个元素:

[12:30pm-1:30pm, 6:00pm-7:00pm, 7:30pm-8:30pm]

我尝试使用以下代码将列转换为数组:

hours = hours.withColumn(
"hoursArray",
split(col("hours"), ",\s*").cast(ArrayType(StringType())).alias("ev"))

但是,当我尝试访问结果数组的第一个元素时,我得到:

[10:30am-11:30am

代替:

[10:30am-11:30am, 12:30pm-1:30pm, 7:00pm-8:00pm]

有什么作用?我假设我用逗号分割而不是用右括号分割,但是我尝试将其更改为无结果。我在做错什么简单的事情吗?谢谢

1 个答案:

答案 0 :(得分:0)

@pansen修复了此问题。这是一个正则表达式修复程序,超级干净。正确的代码是:

hours = hours.withColumn(
"hoursArray",
split(col("hours"), "\],\s*\[").cast(ArrayType(StringType())).alias("ev"))