用于在Spark 2.1.1结构流中读取Kafka Avro消息的Java代码

时间:2019-01-24 20:20:51

标签: apache-spark apache-kafka avro spark-structured-streaming confluent-schema-registry

我正在寻找如何使用Spark结构流从Kafka读取结构复杂的Avro消息

然后,我想解析这些消息并与hbase参考值进行比较,然后将结果保存到hdfs或另一个hbase表中。

我从下面的示例代码开始: https://github.com/Neuw84/spark-continuous-streaming/blob/master/src/main/java/es/aconde/structured/StructuredDemo.java

Avro消息架构:

struct[mTimeSeries:
  struct[cName:string,
         eIpAddr:string,
         pIpAddr:string,
         pTime:string,
         mtrcs:array[struct[mName:string,
                            xValues:array[bigint],
                            yValues:array[string],
                            rName:string]]]]

我正在为此模式使用RowFactory.create创建一行。那么我需要遍历数组字段吗?我了解,一旦我们像在Hive中一样用这种结构创建数据集,就可以在数据集上使用爆炸函数对结构数组的内部字段进行归一化或访问。因此,我想按原样创建一行,即avro消息的样子,然后使用sql函数进行进一步的转换。

    sparkSession.udf().register("deserialize", (byte[] data) -> {
        GenericRecord record = recordInjection.invert(data).get();
        return ***RowFactory.create(record.get("machine").toString(), record.get("sensor").toString(), record.get("data"), record.get("eventTime"));***
    }, DataTypes.createStructType(type.fields())

0 个答案:

没有答案