Я в некотором замешательстве при принятии решения о задаче, которую я выполняю. Это то, что мне нужно в клуб, чтобы казнить с помощью двигателя 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
.
Мой случай: В обоих подходах требуется некоторая предварительная обработка, прежде чем я смогу двигаться вперед с чистым значением на картинке. Я не могу решить, какой подход выбрать.
Есть предложения?