无法解析方法';split(java.lang.String)和#x27;使用lambda表达式时
我正在尝试使用lambda表达式拆分字符串数组。然而,它告诉我split方法无法解析。我这样做是为了将String类型的JavaSpark RDD解析为double无法解析方法';split(java.lang.String)和#x27;使用lambda表达式时,java,apache-spark,lambda,Java,Apache Spark,Lambda,我正在尝试使用lambda表达式拆分字符串数组。然而,它告诉我split方法无法解析。我这样做是为了将String类型的JavaSpark RDD解析为double JavaRDD parsedData = data.map(s -> { String[] sarray = s.split(" "); double[] values = new double[sarray.length]; fo
JavaRDD parsedData = data.map(s -> {
String[] sarray = s.split(" ");
double[] values = new double[sarray.length];
for (int i = 0; i < sarray.length; i++) {
values[i] = Double.parseDouble(sarray[i]);
}
return Vectors.dense(values);
});
parsedData.cache();
JavaRDD parsedData=data.map(s->{
字符串[]sarray=s.split(“”);
double[]值=新的double[sarray.length];
for(int i=0;i
如评论中所述,如果数据类型为流
,则此代码应执行以下操作:
JavaRDD parsedData = data.map( o -> o.toString() )
.map( s ->
{
String[] sarray = s.split( " " );
double[] values = new double [sarray.length];
for( int i = 0; i < sarray.length; i++ )
{
values[i] = Double.parseDouble( sarray[i] );
}
return Vectors.dense( values );
});
parsedData.cache();
JavaRDD parsedData=data.map(o->o.toString())
.map(s->
{
字符串[]sarray=s.split(“”);
double[]值=新的double[sarray.length];
for(int i=0;i
data是否只包含String
s?是的,它是只包含字符串的RDD“data”的数据类型是什么?它必须是Stream,这样编译器才能知道“s”是一个字符串(假设您打算调用java.lang.String.split())。向我们显示完整的错误消息,这样我们就可以看到您试图调用的对象类型是split
。是泛型类,但您没有指定泛型类型参数,这意味着您使用的是原始泛型。不要那样做!始终指定泛型类型参数,例如JavaRDD
——由于缺少类型参数,s
默认为对象
,这就是为什么找不到split
。这不是正确使用泛型的可接受的替代方法。@David Conrad:同意!但是我很懒,没有查找JavaRDD
的定义;相反,我认为声明streamdata=…
是理所当然的。