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

如何从HDFS中检索Avro数据?

汪弘盛
2023-03-14
{"username":"miguno","tweet":"Rock: Nerf paper, scissors is fine.","timestamp": 1366150681 }
{"username":"BlizzardCS","tweet":"Works as intended.  Terran is IMBA.","timestamp": 1366154481 }

{“type”:“record”、“name”:“twitter_schema”、“namespace”:“com.miguno.avro”、“fields”:[{“name”:“username”、“type”:“string”、“doc”:“Twitter.com上的用户帐户名称”}、{“name”:“tweet”、“type”:“string”、“doc”:“用户的Twitter消息内容”}、{“name”:“timestamp”、“type”:“long”、“doc”:“Unix epoch time in seconds”}]、“

然后我将其转换为Avro,如下所示:

java -jar ~/avro-tools-1.7.4.jar fromjson --schema-file twitter.avsc twitter.json > twitter.avro

将该文件放在hdfs上,下面是:

hadoop fs -copyFromLocal twitter.avro <path>

然后我在Spark CLI中发布了代码:

import org.apache.avro.generic.GenericRecord
import org.apache.avro.mapred.{AvroInputFormat, AvroWrapper}
import org.apache.hadoop.io.NullWritable

val path = "hdfs:///path/to/your/avro/folder"
val avroRDD = sc.hadoopFile[AvroWrapper[GenericRecord], NullWritable, AvroInputFormat[GenericRecord]](path)

但是,在执行以下操作时:

avroRDD.first

我面临以下例外:

org.apache.spark.sparkException:由于阶段失败而中止作业:阶段7.0(TID 13)中的任务2.0有一个不可序列化的结果:org.apache.spark.scheduler.dagscheduler.org$apache$spark$scheduler$dagscheduler$$failjobandindependentstages(Dagscheduler.scala:1185)在org.apache.spark.scheduler.dagscheduler$$anonfun$abortstage$1.应用(dagscheduler.scala:1174)在3)在scala.collection.mutable.resizablearray$class.foreach(resizablearray.scala:59)在scala.collection.mutable.arrayBuffer.foreach(arrayBuffer.scala:47)

有什么解决办法?

共有1个答案

闾丘书
2023-03-14

Spark试图ser/de您的avro数据,但它不是“Java可序列化的”(Spark中使用的默认ser.)。

你有几个选择:

  • 从包装器中提取泛型记录,并将每个记录映射到某个可序列化结构
  • 生成特定的记录类并使用它们而不是一般记录(您仍然需要从包装器中提取记录)
  • 启用kryo序列化(这只在某些情况下有效)
 类似资料:
  • 直接从HDFS读取文件,而不将其复制到本地文件系统。不过,我将结果复制到本地文件系统。 hduser@ubuntu:/usr/local/hadoop$mkdir/tmp/gutenberg-output bin/hadoop dfs-getmerge/user/hduser/gutenberg-output/tmp/gutenberg-output deprecated:不推荐使用此脚本执行hd

  • 我试图创建一个简单的程序,从用户的名字,手机号码和电子邮件地址,然后把数据在Firebase实时数据库。 有3个输入框和一个按钮,按一下就可以完成上面的操作。代码如下: 我这样设置了消防基地:

  • 目前我正在做一个项目,我需要从一个表中提取最新的数据用于报告目的。下面是示例表结构:- 我使用下面的SQL查询并能够提取数据。 但问题是真正的表非常大。大约有85k行,这个查询需要一些时间。还有其他更好的方法吗。我正在使用Oracle 11g R2。请建议 这是SQLfiddle链接http://sqlfiddle.com/#!4/b3fe1/8

  • 我试图使用庞大的Node.js包将文件从Docx转换为HTML。庞大的自述文件建议使用以下格式转换文件: 在函数中的任何位置放置语句将不允许我使用存储的html,但是我可以将正确的html内容输出到控制台。我需要关于如何返回/使用promise之外的html变量的建议,谢谢。

  • 我如何从所有userid都未知的医院中检索所有的hospitalNames。

  • 问题内容: 我有以下表格及其关系。我将JSON数据存储在client_services表中。它们是使用MySQL查询来检索JSON值的任何方式,如下所示: 还是可以进一步规范化client_services表? 表: 表: 表: 表: 问题答案: 由于很多人都亲自问过我这个问题,所以我想我会再作一次修改。这是一个具有SELECT,Migration和View Creation的完整SQL的要点,