Avro 是一个基于行的社交系统,可以使用 Apache Hadoop 开发的数据序列化框架。 Avro文件是一种可以承载数据序列化的数据文件,用于将数据序列化为紧凑的二进制格式。当我们使用 Apache MapReduce 尝试时,模式将采用 JSON 格式;然后,当我们有需要分配到子集的巨大数据集时,这些文件可以保留标记。它还具有一个容器文件,用于保留易于读写的谨慎数据;无需进行额外配置。
开始您的免费软件开发课程
网络开发、编程语言、软件测试及其他
Avro 文件是一个数据序列化系统,可以提供大型数据结构和紧凑、快速的二进制数据格式。它还可以有容器文件,可以承载连续的数据并使用RPC过程。此外,由于它集成简单,可以与多种语言一起使用,因此不需要创建新的代码来读取或写入数据文件,并且不需要创建代码。它只能使用严格类型语言进行部署。
通常它有两个部分:第一个是可以自愿的模式,第二个是二进制数据。例如,假设我们想使用文本编辑器查看 avro 文件。在这种情况下,我们可以查看两个段,其中第一个段将包含以对象开头的数据,第二个段将包含可以读取的数据以及我们需要的文件类型确认哪个 Bhoomi 能够读写。
让我们看看 Avro 文件的配置,在其中我们可以借助不同的结构化参数来转换 Avro 数据文件的操作。
当我们使用 Hadoop 时,
当我们尝试配置压缩时,我们必须设置以下属性,
spark.conf.set(“spark.sql.avro.compression.codec”, “deflate”)
spark.conf.set(“spark.sql.avro.deflate.level”, “4”).
Avro 文件有两种类型,
包括 null、Boolean、int、long、double、bytes 和 string。
Schema: {"type": "null"}
{ "kind": "array" "objects": "long" }
{ "kind": "map" "values": "long" }
{ "kind": "record", "name": "---", "doc": "---", "area": [ {"name": "--", "type": "int"}, --- ] }
{ "kind": "enum", "name": "---", "doc": "---", "symbols": ["--", "--"] }
{ "kind": "fixed", "name": "---", "size": in bytes }
[ "null", "string", -- ]
让我们看看带有架构和不带架构的 avro 文件的示例,
使用架构的 Avro 文件:
import java.util.Properties import java.io.InputStream import com.boomi.execution.ExecutionUtil import org.apache.avro.Schema; import org.apache.avro.file.DataFileStream; import org.apache.avro.generic.GenericDatumReader; import org.apache.avro.generic.GenericRecord; import org.apache.avro.io.DatumReader; logger = ExecutionUtil.getBaseLogger(); for (int j = 0; j < dataContext.getDataCount(); j++) { InputStream istm = dataContext.getStream(j) Properties prop = dataContext.getProperties(j) DatumReader<GenericRecord> datumReader = new GenericDatumReader<GenericRecord>(); DataFileStream<GenericRecord> dataFileStream = new DataFileStream<GenericRecord>(istm, datumReader); Schema sche = dataFileStream.getSchema(); logger.info("Schema utilize for: " + sche); GenericRecord rec = null; while (dataFileStream.hasNext()) { rec = dataFileStream.next(rec); System.out.println(rec); istm = new ByteArrayInputStream(rec.toString().getBytes('UTF-8')) dataContext.storeStream(istm, prop) } }
在上面的例子中,schema 与 avro 文件一起使用,我们可以说这是一个可以读取 avro 文件的脚本,在这个例子中,我们生成了多个 JSON 文档。我们已经导入了相关的包,设置了模式,并通过创建对象并使用上面脚本中给出的代码将数据写入 JSON 来调用它。
没有架构的 Avro 文件:
import java.util.Properties import java.io.InputStream import com.boomi.execution.ExecutionUtil import org.apache.avro.Schema; import org.apache.avro.file.DataFileStream; import org.apache.avro.generic.GenericDatumReader; import org.apache.avro.generic.GenericRecord; import org.apache.avro.io.DatumReader; logger = ExecutionUtil.getBaseLogger(); String schemaString = '{"type":"record","name":"college","namespace":"student.avro",' + '"fields":[{"name":"title","type":"string","doc":"college title"},{"name":"exam_date","type":"string","sub":"start date"},{"name":"teacher","type":"int","sub":"main charactor is the teacher in college"}]}' for (int k = 0; k < dataContext.getDataCount(); k++) { InputStream istm = dataContext.getStream(k) Properties prop = dataContext.getProperties(k) DatumReader<GenericRecord> datumReader = new GenericDatumReader<GenericRecord>(); DataFileStream<GenericRecord> dataFileStre= new DataFileStream<GenericRecord>(istm, datumReader); Schema sche = Schema.parse(scheString) logger.info("Schema used: " + sche); GenericRecord rec = null; while (dataFileStre.hasNext()) { rec = dataFileStre.next(rec); System.out.println(rec); is = new ByteArrayInputStream(rec.toString().getBytes('UTF-8')) dataContext.storeStream(is, prop) } }
In the above example, we have written an example of reading files without schema in which we have to understand that if we have not included the schema under the avro file, then we have to perform some steps for informing the interpreter how to explain binary avro data, we also need to generate the schema which has been utilizing, in which this example can avro schema with a different name. We can also set it on another path.
In this article, we have concluded that the avro file is a data file that can work with the data serialized system utilized by Apache Hadoop. It has an open-source platform; we have also seen the configuration of the data files and examples, which helps to understand the concept.
以上是阿夫罗文件的详细内容。更多信息请关注PHP中文网其他相关文章!