当前位置: 首页 > 知识库问答 >
问题:

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

曹旭东
2023-03-14

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

共有2个答案

黎阳冰
2023-03-14

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

//本例检查行是否为空,并打印每个现有行,然后读取行。takeWhile(!=null)。foreach(行)=

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

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

景麒
2023-03-14

你用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的方法。

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

 类似资料:
  • 我是Flink大学的一年级新生,我想知道如何从hdfs读取数据。有谁能给我一些建议或简单的例子吗?谢谢大家。

  • 我有一个大的(>500M行)CSV文件。这个CSV文件中的每一行都包含一个位于HDFS上的二进制文件的路径。我想使用Spark读取这些文件中的每一个,处理它们,并将结果写到另一个CSV文件或表中。 在驱动程序中执行此操作非常简单,下面的代码完成了这项工作 但是失败 是否可以让执行者直接访问HDFS文件或HDFS文件系统?或者,是否有一种有效的方法来读取HDFS/S3上数百万个二进制文件并用Spar

  • 我正在尝试从Kafka读取JSON消息并将它们存储在具有火花结构化流的HDFS中。 我遵循了下面的示例,当我的代码如下所示时: 然后我得到hdfs中具有二进制值的行。 这些行按预期连续写入,但采用二进制格式。 我发现了这个帖子: https://databricks.com/blog/2017/04/26/processing-data-in-apache-kafka-with-structure

  • 所以我必须检索存储在HDFS中的文件的内容,并对其进行某些分析。 问题是,我甚至无法读取文件并将其内容写入本地文件系统中的另一个文本文件。(我是Flink的新手,这只是一个测试,以确保我正确读取了文件) HDFS中的文件是纯文本文件。这是我的密码: 在我运行/tmp之后,它没有输出。 这是一个非常简单的代码,我不确定它是否有问题,或者我只是做了一些别的错误。正如我所说,我对Flink完全是新手 此

  • 问题内容: 我正在尝试将数据从一页传递到另一页。 www.mints.com?name=某物 如何使用JavaScript 阅读? 问题答案: 下面的a代码可以工作,并且在不可用的情况下仍然有用,但是它是在JavaScript中没有本机解决方案的时候编写的。在现代浏览器或Node.js中,更喜欢使用内置功能。 用法如下: 它返回一个像这样的对象: 所以 给

  • 主要内容:使用 bufio 包写入文件,使用 bufio 包读取文件buffer 是缓冲器的意思,Go语言要实现缓冲读取需要使用到 bufio 包。bufio 包本身包装了 io.Reader 和 io.Writer 对象,同时创建了另外的 Reader 和 Writer 对象,因此对于文本 I/O 来说,bufio 包提供了一定的便利性。 buffer 缓冲器的实现原理就是,将文件读取进缓冲(内存)之中,再次读取的时候就可以避免文件系统的 I/O 从而提高速度。