2015-07-27 4 views
2

Следующая зависимость является в ПОМ:, который содержит банку org.apache.spark.sql.api.java.JavaSQLContext

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

я ожидаю банку, чтобы содержать следующий класс:

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

, но в то время как он содержит пакет org.apache.spark.sql.api.java, весь этот пакет, как представляется, содержит интерфейсы с именем UDF1 - UDSF22.

Какая правильная зависимость для получения JavaSQLContext?

Спасибо.

+0

Пожалуйста, ознакомьтесь ответы, приведенные ниже. –

ответ

1

Из беглого поиска выясняется, что класс org.apache.spark.sql.api.java.JavaSQLContext отображается только в версиях 1.2 и ранее файла JAR spark-sql. Вероятно, код, с которым вы работаете, также использует эту более старую зависимость. На данный момент у вас есть два варианта: вы можете либо обновить свое использование кода, либо вы можете понизить рейтинг spark-sql JAR. Вероятно, вы захотите пойти с прежним вариантом.

Если вы настаиваете на сохранении кода совпадают, то в том числе следующую зависимость в вашем ПОМ должны решить эту проблему:

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

Если вы хотите обновить код, увидеть ответ дается @ DB5

4

Класс JavaSQLContext был удален из версии 1.3.0 и далее. Вместо этого вы должны использовать класс org.apache.spark.sql.SQLContext. В documentation говорится следующее:

До Спарк 1,3 были отдельные Java совместимые классы (JavaSQLContext и JavaSchemaRDD), что отражало API Scala. В Spark 1.3 API Java и Scala API были унифицированы. Пользователи любого языка должны использовать SQLContext и DataFrame. В целом тезисы классов пытаются использовать типы, которые можно использовать с обоих языков (т. Е. Array вместо языковых сборников). В некоторых случаях, когда общий тип не существует (например, для передачи в закрытии или Maps) вместо этого используется перегрузка.

Кроме того, был удален API конкретных типов Java. Пользователи как Scala, так и Java должны использовать классы, присутствующие в org.apache.spark.sql.types, для описания схемы программно.

В качестве стороннего варианта, если вы хотите найти, какие банки содержат определенный класс, вы можете использовать Advanced Search из Maven Central и выполнить поиск по имени «По названию». Итак, вот поиск JavaSQLContext: http://search.maven.org/#search|ga|1|fc%3A%22org.apache.spark.sql.api.java.JavaSQLContext%22

+0

Да, да, но вы не объяснили, как плакат может обновить свой код, чтобы использовать новый код. Я чувствовал, что это информация, которую нужно добавить. Не означало причинить вам какое-либо правонарушение. – DB5

+0

Не стоит беспокоиться ... но есть некоторые КО копии кошек там с неприятным укусом^^ –

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(); 
Смежные вопросы