Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SparkStreaming中未获得输出_Java_Apache Spark_Spark Streaming - Fatal编程技术网

Java SparkStreaming中未获得输出

Java SparkStreaming中未获得输出,java,apache-spark,spark-streaming,Java,Apache Spark,Spark Streaming,我正在使用spark streaming api来整合XML消息并生成输出 这是我的密码 成套火花项目 import java.io.StringReader; import java.util.*; import javax.xml.bind.JAXBContext; import javax.xml.bind.Unmarshaller; import org.apache.spark.SparkConf; import org.apache.spark.api.java.function

我正在使用spark streaming api来整合XML消息并生成输出

这是我的密码

成套火花项目

import java.io.StringReader;
import java.util.*;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.Unmarshaller;

import org.apache.spark.SparkConf;
import org.apache.spark.api.java.function.FlatMapFunction;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.SparkSession;
import org.apache.spark.sql.catalyst.encoders.ExpressionEncoder;
import org.apache.spark.sql.catalyst.encoders.RowEncoder;
import org.apache.spark.sql.streaming.StreamingQuery;
import org.apache.spark.sql.streaming.StreamingQueryException;
import org.apache.spark.sql.types.DataTypes;
import org.apache.spark.sql.types.StructType;

import org.apache.spark.sql.Row;
import org.apache.spark.sql.RowFactory;

public class XMLSparkStreamEntry {

    static StructType structType = new StructType();

    static {
        structType = structType.add("FirstName", DataTypes.StringType, false);
        structType = structType.add("LastName", DataTypes.StringType, false);
        structType = structType.add("Title", DataTypes.StringType, false);
        structType = structType.add("ID", DataTypes.StringType, false);
        structType = structType.add("Division", DataTypes.StringType, false);
        structType = structType.add("Supervisor", DataTypes.StringType, false);

    }

    static ExpressionEncoder<Row> encoder = RowEncoder.apply(structType);

    public static void main(String[] args) throws StreamingQueryException {

        SparkConf conf = new SparkConf();
        SparkSession spark = SparkSession.builder().config(conf).appName("Spark Program").master("local[*]")
                .getOrCreate();

        Dataset<Row> ds1 = spark.readStream().format("kafka").option("kafka.bootstrap.servers", "localhost:9092")
                .option("subscribe", "Kafkademo").load();

        Dataset<Row> ss = ds1.selectExpr("CAST(key AS STRING)", "CAST(value AS STRING)");

        Dataset<Row> finalOP = ss.flatMap(new FlatMapFunction<Row, Row>() {

            private static final long serialVersionUID = 1L;

            @Override
            public Iterator<Row> call(Row t) throws Exception {

                JAXBContext jaxbContext = JAXBContext.newInstance(FileWrapper.class);
                Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();

                StringReader reader = new StringReader(t.getAs("value"));
                FileWrapper person = (FileWrapper) unmarshaller.unmarshal(reader);

                List<Employee> emp = new ArrayList<Employee>(person.getEmployees());
                List<Row> rows = new ArrayList<Row>();
                for (Employee e : emp) {

                    rows.add(RowFactory.create(e.getFirstname(), e.getLastname(), e.getTitle(), e.getId(),
                            e.getDivision(), e.getSupervisor()));

                }
                return rows.iterator();
            }
        }, encoder);


        Dataset<Row> wordCounts = finalOP.groupBy("FirstName").count();

        StreamingQuery query = wordCounts.writeStream().outputMode("complete").format("console").start();
        System.out.println("SHOW SCHEMA");
        query.awaitTermination();

    }

}
导入java.io.StringReader;
导入java.util.*;
导入javax.xml.bind.JAXBContext;
导入javax.xml.bind.Unmarshaller;
导入org.apache.spark.SparkConf;
导入org.apache.spark.api.java.function.FlatMapFunction;
导入org.apache.spark.sql.Dataset;
导入org.apache.spark.sql.SparkSession;
导入org.apache.spark.sql.catalyst.encoders.ExpressionEncoder;
导入org.apache.spark.sql.catalyst.encoders.RowEncoder;
导入org.apache.spark.sql.streaming.StreamingQuery;
导入org.apache.spark.sql.streaming.StreamingQueryException;
导入org.apache.spark.sql.types.DataTypes;
导入org.apache.spark.sql.types.StructType;
导入org.apache.spark.sql.Row;
导入org.apache.spark.sql.RowFactory;
公共类XmlSparkStreamery{
静态StructType StructType=新StructType();
静止的{
structType=structType.add(“FirstName”,DataTypes.StringType,false);
structType=structType.add(“LastName”,DataTypes.StringType,false);
structType=structType.add(“Title”,DataTypes.StringType,false);
structType=structType.add(“ID”,DataTypes.StringType,false);
structType=structType.add(“Division”,DataTypes.StringType,false);
structType=structType.add(“主管”,DataTypes.StringType,false);
}
static ExpressionEncoder encoder=rowcoder.apply(structType);
公共静态void main(字符串[]args)抛出StreamingQueryException{
SparkConf conf=新的SparkConf();
SparkSession spark=SparkSession.builder().config(conf.appName(“spark程序”).master(“本地[*]”)
.getOrCreate();
数据集ds1=spark.readStream().format(“kafka”).option(“kafka.bootstrap.servers”,“localhost:9092”)
.option(“订阅”、“卡夫卡德莫”).load();
数据集ss=ds1。选择EXPR(“转换(键为字符串)”,“转换(值为字符串)”;
数据集finalOP=ss.flatMap(新的flatMap函数(){
私有静态最终长serialVersionUID=1L;
@凌驾
公共迭代器调用(t行)引发异常{
JAXBContext JAXBContext=JAXBContext.newInstance(FileWrapper.class);
Unmarshaller Unmarshaller=jaxbContext.createUnmarshaller();
StringReader=新的StringReader(t.getAs(“值”);
FileWrapper person=(FileWrapper)解组器。解组器(reader);
List emp=newarraylist(person.getEmployees());
列表行=新建ArrayList();
对于(员工e:emp){
rows.add(RowFactory.create(e.getFirstname()、e.getLastname()、e.getTitle()、e.getId()、e,
e、 getDivision(),即getSupervisor());
}
返回rows.iterator();
}
},编码器);
数据集wordCounts=finalOP.groupBy(“FirstName”).count();
StreamingQuery query=wordCounts.writeStream().outputMode(“完成”).format(“控制台”).start();
System.out.println(“显示模式”);
query.waittermination();
}
}
但是在输出中,我得到了空的
计数
名字
。如果我把简单的文本当作消息,那么我可以通过字数看到输出。但是,如果将xml作为消息并对其进行解析,它将不起作用并显示为空


我可以知道这里出了什么问题吗?

您的xml输出是什么?我认为,您最需要的是正确地解析xml。@它不是我,在输出中,我只是得到count和FirstName作为name列名,其中没有值。