如何使用Scala语言[duplicate]从hdfs读取数据

问题描述 投票:-2回答:2

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

scala apache-spark apache-spark-sql
2个回答
2
投票

[您用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。


0
投票

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

请让我知道是否能回答您的问题。

© www.soinside.com 2019 - 2024. All rights reserved.