【问题标题】:Difference between sc.textFile and spark.read.text in SparkSpark中sc.textFile和spark.read.text的区别
【发布时间】:2018-10-05 12:11:00
【问题描述】:

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

基于此,必须更改所有后续处理以反映“值”的存在

我的问题是

  • 使用这两种读取文本文件的方式意味着什么?
  • 什么情况下应该使用哪种方法?

【问题讨论】:

    标签: apache-spark rdd


    【解决方案1】:

    回答(a),

    sc.textFile(...) 返回一个RDD[String]

    textFile(String path, int minPartitions)
    

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

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

    text(String path)
    

    加载文本文件并返回一个DataFrame,其模式以一个名为“value”的字符串列开头,如果有的话,后面是分区列。

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

    【讨论】:

      猜你喜欢
      • 2017-12-05
      • 2017-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-09
      • 2017-05-22
      • 1970-01-01
      相关资源
      最近更新 更多