Я новичок в Hadoop, и я использую кластер с одним узлом (для разработки), чтобы вытащить некоторые данные из реляционной базы данных.Write Hive Table, используя Spark SQL и JDBC
В частности, я использую Spark (версия 1.4.1), API Java, чтобы извлекать данные для запроса и писать в Hive. Я столкнулся с различными проблемами (и прочитал руководства и попробовал поиск в Интернете), но я думаю, что я мог бы не понимать какую-то фундаментальную часть этого, потому что у меня проблемы.
Во-первых, я думал, что смогу прочитать данные в Spark, возможно, запустить некоторые методы Spark для управления данными, а затем записать их в Hive через объект HiveContext. Но, кажется, нет никакого способа написать прямо из Искры в Улей. Это правда?
Так что мне нужен промежуточный шаг. Я попробовал несколько разных методов хранения данных перед тем, как писать в Hive, и решил записать текстовый файл HDFS, поскольку он, казалось, работал лучше всего для меня. Однако, записывая файл HDFS, я получаю квадратные скобки в файлах, например: [A, B, C]
Итак, когда я загружаю данные в Hive, используя инструкцию «LOAD DATA INPATH ...» HiveQL , Я получаю квадратные скобки в таблице Hive!
Что мне не хватает? Или более правильно, может кто-то пожалуйста, помогите мне понять, какие шаги мне нужно сделать, чтобы:
- Запуск SQL на SQL Server или Oracle DB
- записи данных к таблице улей, который может быть доступен инструмент приборной панели.
Мой код прямо сейчас, выглядит примерно так:
DataFrame df= sqlContext.read().format("jdbc").options(getSqlContextOptions(driver, dburl, query)).load(); // This step seem to work fine.
JavaRDD<Row> rdd = df.javaRDD();
rdd.saveAsTextFile(getHdfsUri() + pathToFile); // This works, but writes the rows in square brackets, like: [1, AAA].
hiveContext.sql("CREATE TABLE BLAH (MY_ID INT, MY_DESC STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' STORED AS TEXTFILE");
hiveContext.sql("LOAD DATA INPATH '" + getHdfsUri() + hdfsFile + "' OVERWRITE INTO TABLE `BLAH`"); // Get's written like:
MY_INT MY_DESC
------ -------
AAA]
Столбец INT не записывается в вообще, потому что ведущий [делает его больше не числовое значение, а последний столбец не показывает "]" в конце строки в файле HDFS.
Пожалуйста, помогите мне понять, почему это не работает или каким будет лучший способ. Благодаря!
Я не заблокирован каким-либо конкретным подходом, поэтому все варианты будут оценены.
Благодарим за отзыв, но поскольку я все еще изучаю это, я не понимаю, как перейти от моего DataFrame или RDD к классам API HDFS. Любые мысли по этому поводу? –