2

我正在尝试使用 sun-codemodel 创建以下内容。

JavaRDD<Activitydaily> activityBatchDailyRDDs = 
    activityBatchDailyFunction.cassandraTable("test", "tbl")
        .map(new Function<CassandraRow, Activitydaily>() {
            public Activitydaily call(CassandraRow v1) throws Exception {
                return new Activitydaily();
            }
         });

以下是我的代码。但它是完整的。我不知道如何完成它。

JClass cassandraConnector = cm.directClass("com.datastax.spark.connector.cql.CassandraConnector");
JExpression functionExpression = JExpr._new(
    function.narrow(cassandraRow, activityBatchDailyRealTimeBean));

JExpression javaRDDAssignmentExpression = JExpr
    .invoke(JExpr.ref(className + "Function"), "cassandraTable")
        .arg(schema).arg(table);
javaRDDAssignmentExpression = javaRDDAssignmentExpression.invoke("map")
    .arg(functionExpression);
executerBlock.decl(javaRDD.narrow(activityBatchDailyRealTimeBean),
    className + "RDD", javaRDDAssignmentExpression);

以下是我当前的输出。

JavaRDD<Activitydaily> ActivitydailyRDD = 
    ActivitydailyFunction.cassandraTable("demo", "activitydaily")
        .map(new Function<CassandraRow, Activitydaily>());
4

1 回答 1

0

这里真正的问题是:如何定义匿名内部类。

要定义一个匿名内部类,您只需使用实例anonymousClass()上的方法:Jcm

JDefinedClass anonymousFunctionClass = cm.anonymousClass(function.narrow(cassandraRow, activityBatchDailyRealTimeBean));
JMethod callMethod = anonymousFunctionClass.method(JMod.PUBLIC, Activitydaily.class, "call");
callMethod._throws(Exception.class);
JVar v1Param = callMethod.param(CassandraRow.class, "v1");
callMethod.body()._return(JExpr._new(cm.ref(Activitydaily.class)));

然后在您的JExpr._new()通话中使用它:

JClass cassandraConnector = cm.directClass("com.datastax.spark.connector.cql.CassandraConnector");

// Anonymous inner class declaration:
JDefinedClass anonymousFunctionClass = cm.anonymousClass(function.narrow(cassandraRow, activityBatchDailyRealTimeBean));
JMethod callMethod = anonymousFunctionClass.method(JMod.PUBLIC, Activitydaily.class, "call");
callMethod._throws(Exception.class);
JVar v1Param = callMethod.param(CassandraRow.class, "v1");
callMethod.body()._return(JExpr._new(cm.ref(Activitydaily.class)));

JExpression functionExpression = JExpr._new(anonymousFunctionClass);

JExpression javaRDDAssignmentExpression = JExpr
    .invoke(JExpr.ref(className + "Function"), "cassandraTable")
        .arg(schema).arg(table);
javaRDDAssignmentExpression = javaRDDAssignmentExpression.invoke("map")
    .arg(functionExpression);
executerBlock.decl(javaRDD.narrow(activityBatchDailyRealTimeBean),
        className + "RDD", javaRDDAssignmentExpression);

结果如下所示:

activityBatchDailyFunction.cassandraTable("test", "tbl")
    .map(new Function<CassandraRow,Activity_daily>() {
        public Activity_daily call(CassandraRow v1) {
            return new Activity_daily();
        }
    }
);
于 2015-06-12T16:03:35.063 回答