如何解析pyspark中的空格分隔数据?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何解析pyspark中的空格分隔数据?相关的知识,希望对你有一定的参考价值。

我有以下类型的空间分隔的数据,我想用空格解析它但是当特定元素中有“空格”时我会遇到问题。

2018-02-13 17:21:52.809 “EWQRR.OOM” “ERW WERT11”

使用以下代码:

import shlex
rdd= line.map(lambda x: shlex.split(x))

但其返回的反序列化结果如x00x00x00

答案

使用re.findall()和regex “.+?”|S+或者你可以使用@ctwheels的“[^”]*”|S+它表现更好。

rdd = line.map(lambda x: re.findall(r'“.+?”|S+', x))
另一答案

输入: “1234”“ewer”“IIR RT”“OOO”

获得输出:1234,ewer,IIR,RT,OOO

期望的输出。 1234,ewer,IIR RT,OOO

另一答案

默认情况下,如果你使用sparkContexttextFile api作为textFile的api文件,所有文本行都被编码为unicode

从HDFS读取文本文件,本地文件系统(在所有节点上都可用)或任何支持Hadoop的文件系统URI,并将其作为字符串的RDD返回。 如果use_unicode为False,则字符串将保持为str(编码为utf-8),这比unicode更快且更小。 (在Spark 1.2中添加)

默认情况下,此选项为true

@ignore_unicode_prefix
def textFile(self, name, minPartitions=None, use_unicode=True):

这就是你在结果中获得像x00x00x00这样的unicode字符的原因。

您应该在将数据文件读取到use_unicode时包含rdd选项

import shlex
rdd = sc.textFile("path to data file", use_unicode=False).map(lambda x: shlex.split(x))

你的结果应该是

['2018-02-13', '17:21:52.809', 'EWQRR.OOM', 'ERW WERT11']

你甚至可以在地图函数中包含utf-8编码

import shlex
rdd = sc.textFile("path to the file").map(lambda x: shlex.split(x.encode('utf-8')))

我希望答案是有帮助的

以上是关于如何解析pyspark中的空格分隔数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何拆分对象列表以分隔pyspark数据框中的列

pyspark 用字符串中的空格分割 csv - jupyter notebook

如何转换由 | 分隔的顺序数据并且在 pyspark 中的行和列中没有换行符

如何删除 Spark 表列中的空格(Pyspark)

如何将 CSV 值与 pyspark 数据框中的单元格中的值分别分隔为新列及其值

删除 Spark 数据框中的空格时出错 - PySpark