我在CSV文件中有数据,如下所示:
1,2,3,{col1:1,col2:2,col3:3}
1,2,3,{col1:2,col2:2,col3:4}
1,2,3,{col1:3,col2:3,col3:3}
字符串
使用Spark代码读取此数据,以在框架中以这种格式输出:
col1,col2,col3
1,2,3
2,2,4
3,3,3
型
我尝试了几种使用引号和自定义模式的方法。但是,我无法正确地将所有数据都包含在框架中。使用自定义模式,我能够读取如下所示的 df(在第一个“,
“之后截断):
c1,c2,c3,c4
1,2,3,{col1:1
1,2,3,{col1:2
1,2,3,{col1:3
型
4条答案
按热度按时间nle07wnf1#
这里的问题是,您的CSV分隔符也用于JSON列中,而没有对其进行转义或引用。最好的选择是要求您的源提供更好格式的CSV文件(或使用不同的分隔符)。
如果这不是一个选项,您可以在阅读文件后自己拆分文件。对于您的示例,可以如下所示完成。在这里,我们将CSV内容作为文本文件读取,并将其拆分到第4个逗号。从结果数组中,我们选择我们想要的列。
字符串
输出量:
型
请注意,您的真实的数据可能更复杂或结构不同,此解决方案可能不起作用。split 函数将正则表达式作为模式,因此您可以编写适合您的内容。
最后,请注意,自Spark >= 3.0以来,
limit
参数已被支持。w8f9ii692#
我认为你必须使用
from_json
函数。定义JSON列的模式:
字符串
示例片段
将JSON字符串解析为结构
型
de90aj5v3#
我遇到过类似的问题,当我使用 escape 选项时,它得到了解决。
字符串
z4iuyo4d4#
字符串