如何将数据帧传递给Function类以存储为转换使用的成员?

时间:2015-06-30 17:59:35

标签: java apache-spark dataframe

我有一个转换类,someFunction(Dataframe df),我想用另一个数据帧。但是当我尝试在转换期间访问它时,数据帧中的所有内容都为null(LogicalPlan和数据帧中的所有其他内容都为null)。有没有办法可以做到这一点?

编辑:

SparkStreamFlatMapFunction flatMap = new SparkStreamFlatMapFunction(DF);

JavaDStream<DataFrame> words = transaction.flatMap(flatMap);

StreamFlatMapFunction

public SparkStreamFlatMapFunction(DataFrame DF) {
        this.DF = DF;
    }

@Override
public Iterable<DataFrame> call(String arg0) throws Exception {
        DF.show();
}

我得到空指针异常,因为DF中的所有值都为空。

1 个答案:

答案 0 :(得分:1)

正如您所发现的,在Spark中,您无法在另一个RDD(或DataFrame)上的转换或操作中引用另一个RDD(或DataFrame)。支持这些类型操作的常规方法是将两个DataFrame连接在一起,或者如果两个DataFrame中的一个足够小,将数据收集到常规Java / Scala集合中,然后使用broadcast(或跳过广播)并引用该集合。有时除了加入crossproducts之外,还可以用来达到理想的效果。既然你还没有准确发布你想要做的是什么,这是一个非常普遍的答案,但是看PairRDDFunctions可能会让你对可能的解决方案有所了解。祝你的Spark冒险好运:))