Pyspark или Python: предложения необходимы - PullRequest
0 голосов
/ 16 апреля 2019

Я в некотором замешательстве при принятии решения о задаче, которую я выполняю. Это то, что мне нужно в клуб, чтобы казнить с помощью двигателя pyspark. Задача, однако, может быть легко выполнена как в Python, так и в pyspark. Нужны некоторые действительные предложения о том, какой подход рассмотреть.

Часть, которую я здесь делаю, - это чтение таблицы. На основе разных столбцов таблицы я сформулирую динамический запрос SQL, который будет запущен для другой связанной таблицы.

Обе таблицы в hive.

Вот что я делаю и у меня проблемы с чтением таблицы: Подход Python:

import command
cmd = "beeline -u \"jdbc:hive2://my-hive-server:10000/default;principal=hive/remote-server-address\" -e \"select * from mydb.mytable;\""
status, output = commands.getstatusoutput(cmd)

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

>>> print(output)
Java HotSpot(TM) 64-Bit Server VM warning: Using incremental CMS is deprecated and will likely be removed in a future release
scan complete in 2ms
Connecting to jdbc:hive2://hive-server-address:10000/default;principal=hive/remote-server-address
Connected to: Apache Hive (version 1.1.0-cdh5.13.3)
Driver: Hive JDBC (version 1.1.0-cdh5.13.3)
Transaction isolation: TRANSACTION_REPEATABLE_READ
INFO  : Compiling command(queryId=hive_4433529845_d2733a4e-1d18-4e36-ac68-e5598663sdf3): select * from mydb.mytable
INFO  : Semantic Analysis Completed
INFO  : Returning Hive schema: Schema(fieldSchemas:[FieldSchema(name:data_vald_cntl_cnsm.col1, type:string, comment:null), FieldSchema(name:mytable.col2, type:string, comment:null), FieldSchema(name:mytable.col3, type:string, comment:null), FieldSchema(name:mytable.col4, type:string, comment:null), FieldSchema(name:mytable.col5, type:string, comment:null), FieldSchema(name:mytable.col6, type:string, comment:null), FieldSchema(name:mytable.col7, type:string, comment:null)
INFO  : Completed compiling command(queryId=hive_20190416080909_d2733a4e-1d18-4e36-ac68-e98c4e02d987); Time taken: 1.383 seconds
INFO  : Executing command(queryId=hive_20190416080909_d2733a4e-1d18-4e36-ac68-e98c4e02d987): select * from mydb.mytable
INFO  : Completed executing command(queryId=hive_20190416080909_d2733a4e-1d18-4e36-ac68-e98c4e02d987); Time taken: 0.0 seconds

Это дополнительный вывод, который мне придется каким-то образом отфильтровывать (на данный момент, хотя я не уверен, каким образом).

Тогда следующей задачей будет получение каждого элемента каждого столбца в отдельной переменной (список, который я буду использовать, возможно).

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

hc_sesh = spark.builder.enableHiveSupport().getOrCreate()
hc = SQLContext(sc, hc_sesh)
cal = hc.sql("select * from mydb.mytable")
col1 = cal.select("col1")
col2 = cal.select("col2")
>>> print(col1)
DataFrame[col1: string]

Значения переменных выше представлены в формате DataFrame[col1: string], который мне нужно будет обработать, чтобы удалить only имя столбца, т.е. col1.

Мой случай: В обоих подходах требуется некоторая предварительная обработка, прежде чем я смогу двигаться вперед с чистым значением на картинке. Я не могу решить, какой подход выбрать.

Есть предложения?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...