java.lang.RuntimeException:java.lang.ClassCastException:[B不能转换为java.lang.String
在本地模式下运行storm topology时遇到此错误。 我有一个简单的程序来检查一个数字是否是素数。 我使用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
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());很高兴它有帮助:)