Объединение RDD из двух разных баз данных

Я пытаюсь разработать искровое приложение, которое будет получать данные из двух разных баз данных Oracle и работать над ними.

Возможно, такие вещи, как присоединение к RDD, которые я вытащил из двух баз данных, чтобы создать новый RDD.

Могу ли я создавать различные подключения к базе данных внутри одного искрового приложения?

oracle,jdbc,apache-spark,rdd,

1

Ответов: 2


2 принят

вы можете попробовать что-то подобное, это DataFrameподход, хотя я не тестировал ниже.

База данных 1:

val employees = sqlContext.load("jdbc", 
 Map("url" -> "jdbc:oracle:thin:hr/hr@//localhost:1521/database1", 
"dbtable" -> "hr.employees"))
employees.printschema

Dabase 2:

val departments  = sqlContext.load("jdbc", 
Map("url" -> "jdbc:oracle:thin:hr/hr@//localhost:1521/database2", 
"dbtable" -> "hr.departments"))
departments.printschema()

Теперь присоединитесь (широковещательная передача - это намек на то, что его небольшой набор данных и может выполнять широкомасштабное хеш-соединение):

val empDepartments = employees.join(broadcast(departments), 
        employees("DEPARTMENT_ID")===
        departments("DEPARTMENT_ID"), "inner")
empDepartments.printSchema()

empDepartments.explain(true)
empDepartments.show()

1

RDD (или теперь dataframe) - это уровень абстракции, где все данные выглядят одинакового формата независимо от источника данных внизу.

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

sqlContext.read.format("com.databricks.spark.avro").load("somepath").registerTempTable("avro_data")

sqlContext.read.format("parquet").load("someotjerpath").registerTempTable("parquet_data")

sqlContext.read.format("com.databricks.spark.redshift").option("url", jdbcConnectionString).option("query", query).load.registerTempTable("redshift_data")`

и затем сможете:

sqlContext.sql("select * from avro_data a left join parquet_data p on a.key = b.key left join redshift_data r on r.key=a.key")
Oracle, JDBC, апаш-искра, РДД,
Похожие вопросы