哪个jar包含org.apache.spark.sql.api.java.JavaSQLContext



下面的依赖项在pom中:

<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-sql_2.10</artifactId>
    <version>1.3.0</version>
</dependency>

我希望jar包含以下类:

org.apache.spark.sql.api.java.JavaSQLContext

但是当它包含包org.apache.spark.sql.api.java时,所有包看起来都包含名为UDF1 - UDSF22的接口。

获得JavaSQLContext的正确依赖关系是什么?

谢谢。

JavaSQLContext类已从1.3.0版本起删除。您应该使用org.apache.spark.sql.SQLContext类代替。文档说明如下:

在Spark 1.3之前,有独立的Java兼容类(JavaSQLContextJavaSchemaRDD)来镜像Scala API。在Spark 1.3中,Java API和Scala API是统一的。使用这两种语言的用户都应该使用SQLContextDataFrame。一般来说,这些类尝试使用两种语言都可用的类型(即Array,而不是特定于语言的集合)。在某些情况下,如果不存在通用类型(例如,用于传递闭包或Maps),则使用函数重载。

此外,Java特定类型API已被删除。Scala和Java的用户都应该使用org.apache.spark.sql.types中提供的类以编程方式描述模式。

作为题外话,如果您想搜索哪些jar包含特定的类,您可以使用Maven Central的高级搜索并"按类名"搜索。下面是对JavaSQLContext的搜索:http://search.maven.org/ga搜索| 3 | 1 | fc % % 22 org.apache.spark.sql.api.java.javasqlcontext % 22

粗略地搜索一下,似乎类org.apache.spark.sql.api.java.JavaSQLContext只出现在1.2版本和更早版本的spark-sql JAR文件中。您正在使用的代码很可能也在使用这个旧的依赖项。此时您有两个选择:您可以升级您的代码使用,或者您可以降级spark-sql JAR。你可能会选择前一个选项。

如果您坚持保持代码不变,那么在POM中包含以下依赖项应该可以解决问题:

<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-sql_2.10</artifactId>
    <version>1.2.2</version>
</dependency>

如果您想升级代码,请参阅@DB5

给出的答案。

我也遇到了同样的问题,这是因为我看错了文档的版本。

我从最新的文档- https://spark.apache.org/docs/latest/sql-programming-guide.html#loading-data-programmatically -的理解是使用这样的东西(从文档复制):

SQLContext sqlContext = null;   // Determine;
DataFrame schemaPeople = null; // The DataFrame from the previous example.
// DataFrames can be saved as Parquet files, maintaining the schema information.
schemaPeople.write().parquet("people.parquet");
// Read in the Parquet file created above.  Parquet files are self-describing so the schema is preserved.
// The result of loading a parquet file is also a DataFrame.
DataFrame parquetFile = sqlContext.read().parquet("people.parquet");
// Parquet files can also be registered as tables and then used in SQL statements.
parquetFile.registerTempTable("parquetFile");
DataFrame teenagers = sqlContext.sql("SELECT name FROM parquetFile WHERE age >= 13 AND age <= 19");
List<String> teenagerNames = teenagers.javaRDD().map(new Function<Row, String>() {
  public String call(Row row) {
    return "Name: " + row.getString(0);
  }
}).collect();

相关内容

  • 没有找到相关文章

最新更新