以下依赖关系在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
的正确依赖关系是什么?
感谢。
答案 0 :(得分:4)
{1}}类已从版本1.3.0开始删除。您应该使用JavaSQLContext
类。 documentation声明如下:
在Spark 1.3之前,有一些独立的Java兼容类(
org.apache.spark.sql.SQLContext
和JavaSQLContext
)镜像了Scala API。在Spark 1.3中,Java API和Scala API已经统一。这两种语言的用户都应使用JavaSchemaRDD
和SQLContext
。通常,这些类尝试使用可从两种语言使用的类型(即DataFrame
而不是语言特定的集合)。在某些不存在公共类型的情况下(例如,传入闭包或Array
),会使用函数重载。此外,已删除Java特定类型API。 Scala和Java的用户都应该使用
Maps
中的类来以编程方式描述模式。
另外,如果你想搜索哪个罐子包含一个特定的类,你可以使用Maven Central的Advanced Search并搜索“By Classname”。所以这里是搜索JavaSQLContext: http://search.maven.org/#search|ga|1|fc%3A%22org.apache.spark.sql.api.java.JavaSQLContext%22
答案 1 :(得分:1)
通过粗略搜索,似乎类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给出的答案
答案 2 :(得分:0)
我遇到了同样的问题,因为我正在查看文档的错误版本。
我对最新文档的理解 - 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();