无法解析方法';split(java.lang.String)和#x27;使用lambda表达式时

无法解析方法';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

我正在尝试使用lambda表达式拆分字符串数组。然而,它告诉我split方法无法解析。我这样做是为了将String类型的JavaSpark RDD解析为double

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=…
是理所当然的。