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

Python 将字符串转换为嵌套数组-PySpark,python,arrays,regex,python-2.7,pyspark,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:

我有一个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]

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

@pansen修复了这个问题。这是一个正则表达式修复,超级干净。更正后的代码为:

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

我会把它分解成您需要的每个元素,然后重新构建列表。如果这有意义的话。我想你可以把它转换成numpy数组,然后使用
numpy.squence
。这可能会给你预期的结果。我还没试过,但我想这应该行得通。当我使用
“\],\s*\[”时,你的解决方案对我很有效
。很抱歉,我不使用python,所以我只能在这里猜测,但我认为您应该使用regex match,它是存在的,而不是split。split将分割字符串,但它将删除匹配的部分,您希望保留匹配部分的一部分,而正确的模式匹配将完成此操作。