代码之家  ›  专栏  ›  技术社区  ›  Sunitha

如何使用scala语言从hdfs读取数据[复制]

  •  -2
  • Sunitha  · 技术社区  · 6 年前

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

    2 回复  |  直到 5 年前
        1
  •  2
  •   Ryan Widmaier    6 年前

    你用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。一旦加载了数据,就会产生火花 数据帧 对象,该对象具有可与之交互的类似SQL的方法。

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

        2
  •  0
  •   Chaitanya    6 年前

    您可以通过以下方法从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))
    

    //此示例检查行是否为null,并随后打印每个现有行 阅读行。takeWhile(_!=null)。foreach(行=>println(行))

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

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