2016-06-06 2 views
2

Я пытаюсь подключить искру к базе данных PostgreSQL, используя Postgis.
Я подключение его таким образом:Есть ли способ подключить Spark к таблице с использованием типа Postgis Geometry?

val jdbcDF = sc.read.format("jdbc").options(
     Map("url" -> "jdbc:postgresql://dbHost:5432/ticketapp?user=user&password=password", 
     "dbtable" -> "events", 
     "columnNames" -> "name") 
    ).load() 

Проблема заключается в том, что искра не знает Geometry типа. (Я получаю следующее сообщение об ошибке: SQLException: Unsupported type 1111)

Есть ли способ заставить его работать?

Если нет, есть ли способ подключиться к этой таблице без использования проблемного поля, имеющего геометрию типа? Можно ли исключить это поле, чтобы оно работало без необходимости создания дампа таблицы без этого поля?

ответ

3

К сожалению, Spark SQL не знает о типе геометрии [1, 2]. Если вам не нужно проблемное поле, вы можете исключить его.

С помощью jdbc вы можете указать подзапрос, за которым следует временное имя таблицы, а не только имя таблицы [3]. Это полезно, если вы хотите выбрать подмножество своей таблицы или в этом случае исключить поле. Поскольку не существует никакого способа, в SQL, чтобы выбрать все, кроме некоторых столбцов в таблице [4], вам нужно будет перечислить в явном виде столбцов, которые вы хотите сохранить, как это:

val jdbcDF = sc.read.format("jdbc").options(
    Map("url" -> "jdbc:postgresql://dbHost:5432/ticketapp?user=user&password=password", 
     "dbtable" -> "(select col1,col2 from events) tmp") 
).load() 

[1] https://issues.apache.org/jira/browse/SPARK-11526
[ 2] https://github.com/harsha2010/magellan/issues/31
[3] http://metricbrew.com/get-data-from-databases-with-apache-spark-jdbc/
[4] http://www.postgresonline.com/journal/archives/41-How-to-SELECT-ALL-EXCEPT-some-columns-in-a-table.html

Смежные вопросы