Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如果实际数据嵌入了相同的分隔符,如何使用Spark RDD读取带分隔符的文件_Python_Apache Spark_Pyspark_Rdd - Fatal编程技术网

Python 如果实际数据嵌入了相同的分隔符,如何使用Spark RDD读取带分隔符的文件

Python 如果实际数据嵌入了相同的分隔符,如何使用Spark RDD读取带分隔符的文件,python,apache-spark,pyspark,rdd,Python,Apache Spark,Pyspark,Rdd,我正在尝试将文本文件读入rdd 我的样本数据如下 "1" "Hai How are you!" "56" "2" "0213" 带制表符分隔符的3列。我的数据也嵌入了相同的分隔符(您是怎么回事!)。有人能帮我正确解析pyspark中的数据吗 my_Rdd = Spark.SparkContext.textFile("Mytext

我正在尝试将文本文件读入rdd

我的样本数据如下

"1" "Hai    How are you!"   "56"
"2"                         "0213"
带制表符分隔符的3列。我的数据也嵌入了相同的分隔符(您是怎么回事!)。有人能帮我正确解析pyspark中的数据吗

my_Rdd = Spark.SparkContext.textFile("Mytext.txt").map(lambda line:line.split('\t'))
当我执行上面的代码时,我得到下面的输出

ColA,ColB,Colc
"1","Hai,How are you!"
"2","0123"
第二列被拆分为第三列,因为它在实际数据中具有相同的分隔符,对于第二行,第三个值被映射到第二行

我的预期产出是

ColA,ColB,Colc
"1","Hai    How are you!","56"
"2",,"0123"
在Dataframe中,我可以保留引号选项,但在RDD中,我们如何才能做到这一点?

使用忽略引号分隔符的
shlex.split()

import shlex

sc.textFile('Mytext.txt').map(lambda line: shlex.split(line))
另一个字符串示例:

import shlex

rdd = sc.parallelize(['"1"\t"Hai\tHow are you!"\t"56"']).map(lambda line: shlex.split(line))

>>> rdd.collect()
[['1', 'Hai\tHow are you!', '56']]

我们不需要在任何地方提供分隔符吗?当我尝试此代码段时,我得到的是空RDDshlex由任何类似空格的字符分割,因此它也会在
\t
上分割。我不明白为什么你的RDD是空的。我用您提供的文本文件对此进行了测试。@unmshasreeveni请用第二个代码段进行测试?是的。我试过了,它现在可以工作了,但当我尝试使用实际数据时,它正在崩溃,我有一个带引号和不带引号的数据组合。如果没有引号,它将无法按预期工作。我已经编辑了我的问题。可以使用
spark.read.csv('Mytext.txt',sep='\t')。rdd
?我的意思是,手工解析是可能的,但是既然spark已经有了工具,为什么还要重新发明轮子呢。