在 PySpark 中是否有类似eval的功能。
我正在尝试将 Python 代码转换为 PySpark
我正在查询一个数据框,并且其中一列具有数据,如下所示,但采用字符串格式。
[{u'date': u'2015-02-08', u'by': u'abc@gg.com', u'value': u'NA'}, {u'date': u'2016-02-08', u'by': u'dfg@yaa.com', u'value': u'applicable'}, {u'date': u'2017-02-08', u'by': u'wrwe@hot.com', u'value': u'ufc'}]
假设“ x”是在数据框中保存此值的列。
现在,我想传递该字符串列“ x”并获取列表,以便可以将其传递给 mapPartition 函数。
我想避免迭代驱动程序上的每一行,这就是我这样想的原因。
在 Python 中使用 eval()函数(如果已使用):我得到以下输出:
x = "[{u'date': u'2015-02-08', u'by': u'abc@gg.com', u'value': u'NA'}, {u'date': u'2016-02-08', u'by': u'dfg@yaa.com', u'value': u'applicable'}, {u'date': u'2017-02-08', u'by': u'wrwe@hot.com', u'value': u'ufc'}]"
list = eval(x)
for i in list: print i
输出:(这也是我在 PySpark 中想要的)
{u'date': u'2015-02-08', u'by': u'abc@gg.com', u'value': u'NA'}
{u'date': u'2016-02-08', u'by': u'dfg@yaa.com', u'value': u'applicable'}
{u'date': u'2017-02-08', u'by': u'wrwe@hot.com', u'value': u'ufc'}
如何在 PySpark 中做到这一点?
1 回答
您可以通过使用
from_json
函数将 json 字符串转换为实际 json 来受益。为此,您必须定义一个与您的 json 字符串匹配的schema
。最后,像使用eval
一样,使用explode
函数将结构数组分隔到不同的行。如果您有数据
然后创建
dataframe
使用 json
正如我所解释的,您需要使用
schema
,regexp_replace
函数,from_json
函数和explode
函数作为这应该给你
如果您需要问题中提到的 json 字符串,则可以使用
to_json
函数作为这会给你
仅使用字符串
如果您不想遍历 json 的所有复杂性,则可以简单地使用字符串。为此,您需要嵌套
regex_replace
,split
和explode
函数作为这应该给你