Возможно ли считывать данные с сервера Microsoft Sql (и oracle, mysql и т. Д.) В rdd в приложении Spark? Или нам нужно создать набор из памяти и сделать это в RDD?Чтение данных с SQL Server с использованием Spark SQL
ответ
Нашли решение этой проблемы из списка рассылки. Для этого можно использовать JdbcRDD. Мне нужно было получить JSBC-драйвер JQBC-сервера Sql Server и добавить его в lib для моего проекта. Я хотел использовать интегрированную защиту, поэтому мне нужно было поместить sqljdbc_auth.dll (доступную в той же загрузке) в месте, которое может увидеть java.library.path. Затем, код выглядит следующим образом:
val rdd = new JdbcRDD[Email](sc,
() => {DriverManager.getConnection(
"jdbc:sqlserver://omnimirror;databaseName=moneycorp;integratedSecurity=true;")},
"SELECT * FROM TABLE_NAME Where ? < X and X < ?",
1, 100000, 1000,
(r:ResultSet) => { SomeClass(r.getString("Col1"),
r.getString("Col2"), r.getString("Col3")) })
Это дает РДД из SomeClass.The вторых, третьих и четвертых параметров необходимо и для нижних и верхних границ, и количество разделов. Другими словами, эти исходные данные должны быть разделяемыми по длине, чтобы это работало.
В Спарк 1.4.0+ теперь вы можете использовать sqlContext.read.jdbc
Это даст вам DataFrame вместо РДД рядных объектов.
Эквивалент раствора вы публикуемые выше будет
sqlContext.read.jdbc("jdbc:sqlserver://omnimirror;databaseName=moneycorp;integratedSecurity=true;", "TABLE_NAME", "id", 1, 100000, 1000, new java.util.Properties)
Он должен подобрать схему таблицы, но если вы хотите, чтобы заставить его, вы можете использовать метод схемы после прочитайте sqlContext.read.schema(...insert schema here...).jdbc(...rest of the things...)
Обратите внимание, что здесь вы не получите RDD SomeClass (что лучше на мой взгляд). Вместо этого вы получите DataFrame соответствующих полей.
Более подробную информацию можно найти здесь: http://spark.apache.org/docs/latest/sql-programming-guide.html#jdbc-to-other-databases
это собирается быть без ответа, что: P – khandelwaldeval
кажется так ... какой-либо причине, почему? если он может передавать данные из всего, почему не самые обычные магазины? – ashic
вам нужно будет подождать несколько дней, чтобы ответить на этот вопрос, поскольку очень сильно используется тег 'apache-spark'. Подождите пару дней, чтобы ребята из Apache ответили на ваш вопрос. – khandelwaldeval