如何使用 scala 语言从 hdfs 读取数据



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

你用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。 加载数据后,您将拥有一个SparkDataFrame对象,该对象具有可用于与之交互的SQL等方法。

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

你可以按照这种方法从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,并依次打印每个现有行 readLines.takeWhile(_ != null(.foreach(line => println(line((

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

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

最新更新