Spark 中 sc.textFile 和 spark.read.text 之间的区别



我正在尝试将一个简单的文本文件读入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[String]

textFile(String path, int minPartitions)

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

spark.read.text(...)返回DataSet[Row]DataFrame

text(String path)

加载文本文件并返回一个数据帧,其架构以名为"value"的字符串列开头,后跟分区列(如果有(。

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

最新更新