问题标签 [spark-avro]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
3816 浏览

apache-spark - java.lang.NoClassDefFoundError: com/databricks/spark/avro/package$

我正在使用 spark 1.3.0 和 spark-avro 1.0.0。我的 build.sbt 文件看起来像

我正在使用程序集插件构建一个胖罐子。

但是,有时我的代码会因以下错误而失败。如果我这样做,jar -tf Fooassembly.jar我可以在 'com/databricks/spark/avro' 文件夹中看到很多 .class 文件。所以我不知道为什么它抱怨这个特殊的班级。

0 投票
2 回答
7174 浏览

java - How to serialize the data to AVRO schema in Spark (with Java)?

I have defined an AVRO schema, and generated some classes with avro-tools for the schemes. Now, I want to serialize the data to disk. I found some answers about scala for this, but not for Java. The class Article is generated with avro-tools, and is made from a schema defined by me.

Here's a simplified version of the code of how I try to do it:

where serializeArticleToDisk(avroFileName) is defined as follows:

where Article is my avro schema.

Now, the mapper throws me the error:

although the file path is correct.

I use a collect() method afterwards, so everything else within the map function works fine (except for the serialization part).

I am quite new with Spark, so I am not sure if this might be something trivial actually. I suspect that I need to use some writing functions, not to do the writing in the mapper (not sure if this is true, though). Any ideas how to tackle this?

EDIT:

The last line of the error stack-trace I showed, is actually on this part:

dataFileWriter.create(this.article.getSchema(), new File(filename));

This is the part that throws the actual error. I am assuming the dataFileWriter needs to be replaced with something else. Any ideas?

0 投票
0 回答
84 浏览

scala - 找出导致异常的文件

我在 HDFS 上打开一堆文件(大约 50 个),如下所示:

然后我做了一堆操作,df在某些时候我得到:

我怀疑其中一个文件可能存在问题,但我不知道是哪个文件。如果我与其中一个一起运行,则作业会正确完成。

有没有办法捕捉异常并找出哪个是坏苹果?

0 投票
1 回答
2264 浏览

scala - 从 Apache Spark 中的 Avro 文件中读取不受支持的联合类型组合

我正在尝试从读取 csv 平面文件切换到 spark 上的 avro 文件。遵循https://github.com/databricks/spark-avro 我使用:

并得到

自述文件明确指出:

该库支持读取所有 Avro 类型,复杂联合类型除外。它使用以下从 Avro 类型到 Spark SQL 类型的映射:

当我尝试对同一个文件进行文本读取时,我可以看到架构

{"name":"log_record","type":"record","fields":[{"name":"request","type":{"type":"record","name":"request_data ","fields":[{"name":"datetime","type":"string"},{"name":"ip","type":"string"},{"name":"host ","type":"string"},{"name":"uri","type":"string"},{"name":"request_uri","type":"string"},{"name ":"referer","type":"string"},{"name":"useragent","type":"string"}]}}

<-------完整回复的摘录------->

因为我对获取这些文件的格式几乎没有控制权,所以我的问题是 -有没有人测试过并且可以推荐的解决方法?

我使用 gc dataproc

MASTER=yarn-cluster spark-shell --num-executors 4 --executor-memory 4G --executor-cores 4 --packages com.databricks:spark-avro_2.10:2.0.1,com.databricks:spark-csv_2 .11:1.3.0

任何帮助将不胜感激.....

0 投票
1 回答
1196 浏览

apache-spark - 通过火花流或水槽将 Xml 转换为 Avro 从 Kafka 到 hdfs

我想将 xml 文件转换为 avro。数据将是xml格式,将首先命中kafka主题。然后,我可以使用 flume 或 spark-streaming 来摄取并从 xml 转换为 avro 并将文件放在 hdfs 中。我有一个cloudera环境。

当 avro 文件命中 hdfs 时,我希望能够稍后将它们读入配置单元表。

我想知道最好的方法是什么?我已经尝试过自动模式转换,例如 spark-avro(这是没有 spark-streaming),但问题是 spark-avro 转换数据但配置单元无法读取它。Spark avro 将 xml 转换为数据帧,然后从数据帧转换为 avro。avro 文件只能由我的 spark 应用程序读取。我不确定我是否正确使用它。

我想我需要为 avro 模式定义一个显式模式。不确定如何处理 xml 文件。它有多个命名空间并且非常庞大。

0 投票
2 回答
2246 浏览

apache-spark - 在 spark-shell 中使用 avro 时出现 NoClassDefFoundError

我不断得到

java.lang.NoClassDefFoundError: org/apache/avro/mapred/AvroWrapper

调用show()DataFrame 对象时。我正在尝试通过外壳(spark-shell --master yarn)来做到这一点。我可以看到 shell 在创建 DataFrame 对象时识别了模式,但是如果我对数据执行任何操作,它总是会NoClassDefFoundError在尝试实例化AvroWrapper. 我尝试avro-mapred-1.8.0.jar$HDFS_USER/lib集群上的目录中添加,甚至在启动 shell 时使用 --jar 选项将其包含在内。这些选项都不起作用。任何建议将不胜感激。下面是示例代码:

0 投票
2 回答
893 浏览

avro - 如何从包含二进制格式的avro消息的文件中读取/解析*仅* JSON模式?

我在一个文件中有一个二进制格式的 avro 消息。

Obj^A^D^Vavro.schemaÞ^B{"type":"record","name":"rec","namespace":"ns","fields":[{"name":"id", "type":["int","null"]},{"name":"name","type":["string","null"]},{"name":"foo_id","type ":["int","null"]}]}^Tavro.codec^Lsnappy^@¤²/n¹¼Bù<9b> à«_^NÌ^W

我只是对 SCHEMA 感兴趣。有没有办法从这个文件中读取/解析模式?我目前正在手动解析这个文件以提取模式,但我希望 avro 能帮助我以一种标准的方式来做这件事。

0 投票
1 回答
718 浏览

scala - Spark - Avro 读取架构但 DataFrame 为空

我正在使用Gobblin定期从中提取关系数据Oracle,将其转换为avro并发布到HDFS

我的 dfs 目录结构如下所示

我正在尝试像这样读取它:

当我运行时,printSchema我可以看到模式被正确解释。

但是,当我运行countor时show,它们DataFrames是空的。我已通过将.avro文件转换为JSON

我怀疑它可能与目录结构有关。也许 Spark avro 库只从根目录向下一层查找.avro文件。日志似乎表明驱动程序中仅列出了 t1 下的目录:

16/07/07 10:47:09 信息 avro.AvroRelation:在驱动程序上列出 hdfs://myhost.mydomain.com:8020/user/username/gobblin/job-output/tables/t1

16/07/07 10:47:09 信息 avro.AvroRelation:在驱动程序上列出 hdfs://myhost.mydomain.com:8020/user/username/gobblin/job-output/tables/t1/20160706230001_append

有没有人经历过类似的事情,或者知道如何解决这个问题?t1因为名称是由时间戳生成的,所以我不得不指向低于目录的位置。

0 投票
1 回答
243 浏览

apache-spark - 尝试了解 Spark UI 作业选项卡

我正在开发一个 spark 程序,我必须在其中加载 avro 数据并对其进行处理。我试图了解如何为 spark 应用程序创建作业 ID。我使用下面的代码行来加载 avro 数据。

sqlContext.read.format("com.databricks.spark.avro").load(路径)

据我所知,工作 ID 将根据程序中遇到的操作创建。我的工作计划每 30 分钟运行一次。当我查看此应用程序的 spark 历史服务器时,我看到为加载操作创建了一个作业 ID。它只是偶尔发生,日志看起来非常好。我正在使用火花 1.6.1

我很想知道加载操作是否会在应用程序中创建新的作业 ID?

0 投票
1 回答
722 浏览

apache-spark - Spark 在写入 Avro 时更改了架构

我有一个 Spark 作业(在 CDH 5.5.1 中),它加载两个 Avro 文件(都具有相同的架构),将它们组合成一个 DataFrame(也具有相同的架构),然后将它们写回 Avro。

该作业明确比较两个输入模式以确保它们相同。

这用于将现有数据与一些更新结合起来(因为文件是不可变的)。然后,我通过在 HDFS 中重命名它们来用新的组合文件替换原始文件。

但是,如果我重复更新过程(即尝试向先前更新的文件添加一些进一步的更新),作业将失败,因为模式现在不同了!到底是怎么回事?