Apache spark spark中sc.textFile和spark.read.text之间的差异

Apache spark spark中sc.textFile和spark.read.text之间的差异,apache-spark,rdd,Apache Spark,Rdd,我试图将一个简单的文本文件读入Spark RDD,我发现有两种方法: from pyspark.sql import SparkSession spark = SparkSession.builder.master("local[*]").getOrCreate() sc = spark.sparkContext textRDD1 = sc.textFile("hobbit.txt") textRDD2 = spark.read.text('hobbit.txt').rdd 然后我查看数据,发

我试图将一个简单的文本文件读入Spark RDD,我发现有两种方法:

from pyspark.sql import SparkSession
spark = SparkSession.builder.master("local[*]").getOrCreate()
sc = spark.sparkContext
textRDD1 = sc.textFile("hobbit.txt")
textRDD2 = spark.read.text('hobbit.txt').rdd
然后我查看数据,发现这两个RDD的结构不同

textRDD1.take(5)

['The king beneath the mountain',
 'The king of carven stone',
 'The lord of silver fountain',
 'Shall come unto his own',
 'His throne shall be upholden']

textRDD2.take(5)

[Row(value='The king beneath the mountain'),
 Row(value='The king of carven stone'),
 Row(value='The lord of silver fountain'),
 Row(value='Shall come unto his own'),
 Row(value='His throne shall be upholden')]
基于此,必须更改所有后续处理以反映“值”的存在

我的问题是

  • 使用这两种方式读取文本文件意味着什么
  • 在什么情况下我们应该使用哪种方法
回答(a)

sc.textFile(…)
返回一个
RDD[字符串]

从HDFS、本地文件系统(可在所有节点上使用)或任何支持Hadoop的文件系统URI读取文本文件,并将其作为字符串的RDD返回

spark.read.text(…)
返回一个
DataSet[行]
或一个
DataFrame

加载文本文件并返回一个数据帧,其模式以名为“value”的字符串列开头,如果有,后跟分区列

对于(b),这实际上取决于您的用例。由于您试图在此处创建RDD,因此应使用
sc.textFile
。您始终可以将数据帧转换为rdd,反之亦然

textFile(String path, int minPartitions)
text(String path)