我正在从数据帧中获取列。列属于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
会更好,因为我将循环每个分区而不是每个记录?在
如果您不想转到
dataframes
,那么可以对您创建的rdd数据使用regex replace和split函数。在如果你有数据作为
然后您可以创建rdd并使用regex replace和split函数作为
^{pr2}$使用
^{3}$flatMap
以便拆分的数据以单独的行形式出现在中我希望答案是有帮助的
注意:如果你想用
dataframe
的方式来解决问题,那么你可以从我的other answer那里得到想法可以使用regexp_replace删除方括号,然后在逗号上拆分。一开始,我认为你需要做一些特别的事情,以避免在花括号内的逗号上分裂。但是spark似乎自动避免了sql。例如,Zeppelin中的以下查询
给了我
^{pr2}$这就是你想要的。在
如果使用数据帧,则可以使用withColumn以这种方式添加列。由于某些原因,如果大括号内的逗号被拆分,您可以像下面的post-Regex: match only outside parenthesis (so that the text isn't split within parenthesis)?那样做更多的regex foo。在
希望这是有道理的。我不确定您是否在使用数据帧,但建议您使用较低级别的RDDAPI。在
相关问题 更多 >
编程相关推荐