Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.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
Apache spark 将DF转换为RDD后尝试在flatmap中应用分割方法时出现属性错误分割_Apache Spark_Pyspark - Fatal编程技术网

Apache spark 将DF转换为RDD后尝试在flatmap中应用分割方法时出现属性错误分割

Apache spark 将DF转换为RDD后尝试在flatmap中应用分割方法时出现属性错误分割,apache-spark,pyspark,Apache Spark,Pyspark,我使用下面的代码片段来阅读一些使用spark上下文的示例文件 >>> textFile = sc.textFile("hdfs:///user/hive/warehouse/sample.txt") >>> textFile.flatMap(lambda word:word.split(" ")).collect() 假设输出如下所示 [u'hi', u'there,', u'I', u'am', u'working', u'on', u'something

我使用下面的代码片段来阅读一些使用spark上下文的示例文件

>>> textFile = sc.textFile("hdfs:///user/hive/warehouse/sample.txt")
>>> textFile.flatMap(lambda word:word.split(" ")).collect()
假设输出如下所示

[u'hi', u'there,', u'I', u'am', u'working', u'on', u'something', u'random.']
现在,我使用下面的代码片段读取一些使用数据帧的示例文件,然后尝试转换为rdd并像前面一样应用flatmap

>>> df = spark.read.text("hdfs:///user/hive/warehouse/sample.txt")
>>> df.rdd.flatMap(lambda word:word.split(" ")).collect()
此操作失败,属性错误为拆分

我继续使用下面的代码片段检查df.rdd和textFile的数据类型

>>> type(df.rdd)
<class 'pyspark.rdd.RDD'>
>>> type(textFile)
<class 'pyspark.rdd.RDD'>
>类型(df.rdd)
>>>类型(文本文件)
两者都是相同的

现在,当我使用下面的代码片段检查这些Rdd的单个元素的类型时。我在观察差异

>>> textFile.map(lambda x:type(x)).collect()
[<type 'unicode'>]
>>> df.rdd.map(lambda x:type(x)).collect()
[<class 'pyspark.sql.types.Row'>]
>textFile.map(lambda x:type(x)).collect()
[]
>>>map(lambda x:type(x)).collect()
[]

为什么会有差异

在将df转换为rdd之后,您应该将其转换为list

>>> textFile = sc.textFile("hdfs://localhost:8020/test/ali/sample.txt")
>>> textFile.flatMap(lambda word:word.split(" ")).collect()
['hi', 'there,', 'I', 'am', 'working', 'on', 'something', 'random.']
>>> 
>>> df = spark.read.text("hdfs://localhost:8020/test/ali/sample.txt")
>>> df.rdd.flatMap(lambda x: list(x)).flatMap(lambda word:word.split(" ")).collect()
['hi', 'there,', 'I', 'am', 'working', 'on', 'something', 'random.']

在Scala中,无需使用spark.read进行两次平面映射。有趣。你知道为什么吗?我认为隐式转换是Scala。