【问题标题】:How to read data from hdfs using scala language [duplicate]如何使用scala语言从hdfs读取数据[重复]
【发布时间】:2018-10-21 23:02:57
【问题描述】:

如何使用 Scala 语言从 hdfs 数据集中读取数据? data 是任何记录有限的“CSV”文件。

【问题讨论】:

    标签: scala apache-spark apache-spark-sql


    【解决方案1】:

    您使用 Spark 标记了问题,所以我假设您正在尝试使用它。我建议您首先阅读此处的 Spark 文档,以了解如何使用 Spark 与您的数据进行交互。

    https://spark.apache.org/docs/latest/quick-start.html

    https://spark.apache.org/docs/latest/sql-programming-guide.html

    但是,为了回答您的具体问题,在 Spark 中,您可以使用如下代码读取 CSV 文件:

    val csvDf = spark.read.format("csv")
      .option("sep", ",")
      .option("header", "true")
      .load("hdfs://some/path/to/data.csv/")
    

    您提供的路径将指向 HDFS 上的 CSV 文件,或包含多个 CSV 文件的文件夹。此外,Spark 将接受其他类型的文件系统。例如,您还可以使用“file://”来访问本地文件系统,或者使用“s3://”来使用 S3。加载数据后,您将拥有一个 Spark DataFrame 对象,其中包含可与之交互的类似 SQL 的方法。

    注意,我提供了一个分隔符选项,只是为了向您展示如何操作,但它默认为“,”,所以它不是必需的。此外,如果您的 CSV 文件不包含标头,则您需要自己指定 Schema 并将标头设置为 false。

    【讨论】:

      【解决方案2】:

      您可以按照以下方法从 HDFS 读取数据:-

      val hdfs = FileSystem.get(new URI("hdfs://hdfsUrl:port/"), new Configuration()) 
      val path = new Path("/pathOfTheFileInHDFS/")
      val stream = hdfs.open(path)
      def readLines = Stream.cons(stream.readLine, Stream.continually( stream.readLine))
      

      //此示例检查行是否为空并打印每个现有行 readLines.takeWhile(_ != null).foreach(line => println(line))

      也请看这篇文章https://blog.matthewrathbone.com/2013/12/28/reading-data-from-hdfs-even-if-it-is-compressed

      如果这回答了您的问题,请告诉我。

      【讨论】:

      • 感谢柴坦亚的快速回复
      • @Sunitha 如果回答了您的问题,请接受答案。
      猜你喜欢
      • 2017-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-20
      • 2019-06-02
      • 2021-06-18
      • 1970-01-01
      相关资源
      最近更新 更多