如何使用spark函数PySp将字符串转换为列表

2024-09-29 18:55:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在从数据帧中获取列。列属于string类型。在

x = "[{somevalues, id:1, name:'xyz'}, {address:Some Value}, {somevalue}]"&依此类推。。在

数据以字符串形式存储。它可以很容易地表示为一个列表。 我希望输出是:

LIST of [
{somevalues, id:1, name:'xyz'}, 
{address:Some Value}, 
{somevalue}
]

如何使用Spark的API实现这一点?我知道在Python中,我可以使用eval(x)函数,它将返回列表,或者我可以使用x.split()函数,它也将返回一个列表。但是,在这种方法中,它需要为每个记录迭代。在

另外,我想使用mapPartition;这就是为什么我需要字符串列在一个列表中,这样我就可以将它传递给mapPartition。在

有没有一种有效的方法可以使用spark API转换字符串数据,或者mapPartitions会更好,因为我将循环每个分区而不是每个记录?在


Tags: 数据方法函数字符串nameapiid列表
2条回答

如果您不想转到dataframes,那么可以对您创建的rdd数据使用regex replacesplit函数。在

如果你有数据作为

x = "[{somevalues, id:1, name:'xyz'}, {address:Some Value}, {somevalue}]"

然后您可以创建rdd并使用regex replacesplit函数作为

^{pr2}$

使用flatMap以便拆分的数据以单独的行形式出现在

^{3}$

我希望答案是有帮助的

注意:如果你想用dataframe的方式来解决问题,那么你可以从我的other answer那里得到想法

可以使用regexp_replace删除方括号,然后在逗号上拆分。一开始,我认为你需要做一些特别的事情,以避免在花括号内的逗号上分裂。但是spark似乎自动避免了sql。例如,Zeppelin中的以下查询

%sql
select split(regexp_replace("[{somevalues, id:1, name:'xyz'}, {address:Some Value}, {somevalue}]",  "[\\[\\] ]", ""), ",")

给了我

^{pr2}$

这就是你想要的。在

如果使用数据帧,则可以使用withColumn以这种方式添加列。由于某些原因,如果大括号内的逗号被拆分,您可以像下面的post-Regex: match only outside parenthesis (so that the text isn't split within parenthesis)?那样做更多的regex foo。在

希望这是有道理的。我不确定您是否在使用数据帧,但建议您使用较低级别的RDDAPI。在

相关问题 更多 >

    热门问题