web-dev-qa-db-ja.com

Apacheの行/列の値を更新する方法Spark DataFrame?

こんにちは私は注文したSpark DataFrameを持っています。次のコードを使用して反復しながらいくつかの行を変更したいのですが、Rowオブジェクトを更新する方法がないようです

_orderedDataFrame.foreach(new Function1<Row,BoxedUnit>(){

@Override
public BoxedUnit apply(Row v1) {
//how to I change Row here 
//I want to change column no 2 using v1.get(2)
//also what is BoxedUnit how do I use it
return null;
}
});
_

また、上記のコードでは、"myclassname is not abstract and it does not override abstract method apply$mcVj$sp(long) in scala Function 1"というコンパイルエラーが発生しています。ガイドしてください。 Sparkは初めてです。 1.4.0リリースを使用しています。

8
Umesh K

これを試して:

 final DataFrame withoutCurrency = sqlContext.createDataFrame(somedf.javaRDD().map(row -> {
            return RowFactory.create(row.get(0), row.get(1), someMethod(row.get(2)));
        }), somedf.schema());
9
Dataset<Row> ds = spark.createDataFrame(Collections.singletonList(data), SellerAsinAttribute.class);
        ds.map((i)-> {
            Object arrayObj = Array.newInstance(Object.class, i.length());
            for (int n = 0; n < i.length(); ++n) {
                Array.set(arrayObj, n, i.get(n));//change 'i.get(n)' to anything you want, if you change type, remember to update schema
            }
            Method create = RowFactory.class.getMethod("create", Object[].class);
            return (Row) create.invoke(null, arrayObj);
        }, RowEncoder.apply(ds.schema())).show();
0
Dafan