Apache spark 将DF转换为RDD后尝试在flatmap中应用分割方法时出现属性错误分割
我使用下面的代码片段来阅读一些使用spark上下文的示例文件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
>>> 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。