java.lang.RuntimeException:java.lang.ClassCastException:[B不能转换为java.lang.String

java.lang.RuntimeException:java.lang.ClassCastException:[B不能转换为java.lang.String,java,multithreading,classcastexception,apache-storm,runtimeexception,Java,Multithreading,Classcastexception,Apache Storm,Runtimeexception,在本地模式下运行storm topology时遇到此错误。 我有一个简单的程序来检查一个数字是否是素数。 我使用KafkaSpout作为源代码,并使用storm进行处理。 卡夫卡版本2.10-0.8.2.1 风暴版本0.9.4 动物园管理员3.4.6 下面是我检查素数的螺栓 public class PrimeNumberBolt extends BaseRichBolt { private static final long serialVersionUID = 1L; pr

在本地模式下运行storm topology时遇到此错误。 我有一个简单的程序来检查一个数字是否是素数。 我使用
KafkaSpout
作为源代码,并使用storm进行处理。 卡夫卡版本2.10-0.8.2.1 风暴版本0.9.4 动物园管理员3.4.6

下面是我检查素数的螺栓

public class PrimeNumberBolt extends BaseRichBolt 
{
    private static final long serialVersionUID = 1L;
    private OutputCollector collector;



    public void prepare( Map conf, TopologyContext context, OutputCollector collector ) 
    {
        this.collector = collector;
    }

    public void execute( Tuple tuple ) 
    {
        //System.out.println(tuple.getFields());
        //System.out.println(tuple.getString(0));
        String num = tuple.getString(0);
        //int number = tuple.getInteger( 0 );
        int number = Integer.parseInt(num);
        //System.out.println("IN Primenumber bolt = "+number);

        if( isPrime( number) )
        {  
            System.out.println( number );

        }
        collector.ack( tuple );
    }

    public void declareOutputFields( OutputFieldsDeclarer declarer ) 
    {
        declarer.declare( new Fields( "number" ) );
    }   

    private boolean isPrime( int n ) 
    {
        if( n == 1)
        {
            return false;
        }
        if( n == 2 || n == 3 )
        {
            return true;
        }

        // Is n an even number?
        if( n % 2 == 0 )
        {
            return false;
        }

        //if not, then just check the odds
        for( int i=3; i*i<=n; i+=2 ) 
        {
            if( n % i == 0)
            {
                return false;
            }
        }
        return true;
    }
}

请建议我在代码中需要做的修改。提前谢谢!!

看起来您的卡夫卡正在以字节数组格式读取数据

通过如下设置spoutconfig.Scheme,尝试使用字符串方案

spoutConfig.scheme = new SchemeAsMultiScheme(new StringScheme());

您的卡夫卡似乎以字节数组格式读取数据

通过如下设置spoutconfig.Scheme,尝试使用字符串方案

spoutConfig.scheme = new SchemeAsMultiScheme(new StringScheme());

什么tuple.getString(0);返回?它返回一个字符串。在我的kafka集群中,数据存储为字符串(如232,12等)。因此,我正在将其读取并解析为int。什么tuple.getString(0);返回?它返回一个字符串。在我的kafka集群中,数据存储为字符串(如232,12等)这是我的卡夫卡喷注{String zkHostPort=“localhost:2181”String topic=“cust3”String zkRoot=“/prime”String zktoot=“prime喷注”;ZkHosts ZkHosts=new ZkHosts(zkHostPort);SpoutConfig.scheme=new SchemeAsMultiScheme(new StringScheme());SpoutConfig spoutCfg=new SpoutConfig(ZkHosts,topic,zkRoot,zkSpoutId);kafkapsout-kafkapsout=new kafkafkapsout(spoutCfg);返回kafkapsout;}我添加了它。但是它抛出了错误,因为无法对非静态字段SpoutConfig.scheme进行静态引用。在您的案例中,我想您最终可以声明,比如spoutCfg.scheme=new SchemeAsMultiScheme(new StringScheme());很高兴它有帮助:)这是我的kafka spout uuu u________________________{String zkHostPort=“localhost:2181”;String-topic=“cust3”String-zkRoot=“/prime”String-zkmoutit=“prime-spoutit”;ZkHosts-ZkHosts=new-ZkHosts(zkHostPort);SpoutConfig.scheme=new-SchemeAsMultiScheme(new-StringScheme());SpoutConfig-spoutCfg=new-SpoutConfig(zkHosts,topic,zkRoot,zkspoutit);KafkaSpout-KafkaSpout=new-KafkaSpout(spoutCfg);返回KafkaSpout;}我已经添加了它。但是它抛出了错误,因为无法对非静态字段SpoutConfig.scheme进行静态引用。在您的案例中,我认为您最终可以声明,比如spoutCfg.scheme=new SchemeAsMultiScheme(new StringScheme());很高兴它有帮助:)