如何使用Java在Spark数据帧中应用映射函数?
我正在尝试使用Java在Spark中的DataFrame上使用map函数。我遵循的文件中说 mapscala.Function1f,scala.reflect.ClassTag证据$4 通过将函数应用于此数据帧的所有行,返回新的RDD 在使用map中的Function1时,我需要实现所有的函数。我已经看到了一些与此相关的内容,但是提供的解决方案将数据帧转换为RDD。 如何在不将map函数转换为RDD的情况下在DataFrame中使用map函数?map ie scala.reflect.ClassTag证据$4的第二个参数是什么 我正在使用Java 7和Spark 1.6。我认为在数据帧上使用map不是正确的方法。也许你应该看看这些例子如何使用Java在Spark数据帧中应用映射函数?,java,apache-spark,apache-spark-sql,Java,Apache Spark,Apache Spark Sql,我正在尝试使用Java在Spark中的DataFrame上使用map函数。我遵循的文件中说 mapscala.Function1f,scala.reflect.ClassTag证据$4 通过将函数应用于此数据帧的所有行,返回新的RDD 在使用map中的Function1时,我需要实现所有的函数。我已经看到了一些与此相关的内容,但是提供的解决方案将数据帧转换为RDD。 如何在不将map函数转换为RDD的情况下在DataFrame中使用map函数?map ie scala.reflect.Class
在那里,它们展示了如何对数据帧进行操作,您可以直接使用数据集,而不需要将读取的数据转换为RDD,这是不必要的资源消耗
dataset.MapFuncton{…},编码器;这应该足以满足您的需要。我知道您的问题是关于Java 7和Spark 1.6的,但在Spark 2和显然是Java 8中,您可以将映射函数作为类的一部分,因此不需要操作Java lambdas 这个电话看起来像:
Dataset<String> dfMap = df.map(
new CountyFipsExtractorUsingMap(),
Encoders.STRING());
dfMap.show(5);
/**
* Returns a substring of the values in the id2 column.
*
* @author jgp
*/
private final class CountyFipsExtractorUsingMap
implements MapFunction<Row, String> {
private static final long serialVersionUID = 26547L;
@Override
public String call(Row r) throws Exception {
String s = r.getAs("id2").toString().substring(2);
return s;
}
}
这个类看起来像:
Dataset<String> dfMap = df.map(
new CountyFipsExtractorUsingMap(),
Encoders.STRING());
dfMap.show(5);
/**
* Returns a substring of the values in the id2 column.
*
* @author jgp
*/
private final class CountyFipsExtractorUsingMap
implements MapFunction<Row, String> {
private static final long serialVersionUID = 26547L;
@Override
public String call(Row r) throws Exception {
String s = r.getAs("id2").toString().substring(2);
return s;
}
}
您可以在中找到更多详细信息。因为您没有给出任何具体的问题,所以在DataFrame中有一些常见的映射选项,如select、selectExpr和withColumn。如果spark sql内置函数不能满足您的任务,您可以使用UTF。映射函数将返回RDD,如文档所述。。。。在任何情况下,是什么阻止您获得Spark 2或至少Java 8?是的。map函数无论如何都返回RDD,但是如果不能直接使用它,为什么在DataFrame中提供map函数呢?实际上我正处于学习阶段,我们不知道客户是使用spark 1.7还是spark 2。所以我们必须在这两种情况下进行计算。我在DataFrame中使用了groupBy、agg和orderBy操作。因此,我们需要避免在DataFrame上进行哪些操作,我没有看到任何关于这方面的文档。无论如何,谢谢你的重播。