Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Java在Spark数据帧中应用映射函数?_Java_Apache Spark_Apache Spark Sql - Fatal编程技术网

如何使用Java在Spark数据帧中应用映射函数?

如何使用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

我正在尝试使用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不是正确的方法。也许你应该看看这些例子


在那里,它们展示了如何对数据帧进行操作,您可以直接使用数据集,而不需要将读取的数据转换为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上进行哪些操作,我没有看到任何关于这方面的文档。无论如何,谢谢你的重播。