извлеките интересующие нас поля и запишите в файл результатов поля + результат подсчета, используя scala spark - PullRequest
3 голосов
/ 02 июля 2019

Мне нужно импортировать файл CSV, который содержит несколько полей, позже я должен выполнить цикл по некоторым интересующим нас полям, чтобы восстановить содержащиеся в нем данные.

В этом файле есть поле с именем query, содержащееЗапросы SQL, которые должны быть выполнены и сохранены в другом файле CSV, который будет содержать поля для извлечения, а также результаты каждого запроса.

Ниже приведен мой код:

// step1:read the file
val table_requete = spark.read.format("com.databricks.spark.csv").option("header","true").option("delimiter", ";").load("/user/swychowski/ClientAnlytics_Controle/00_Params/filtre.csv")
req.registerTempTable("req")
// step2:read the file

Однако я не знаю, как зациклить и сохранить другой файл одновременно.

1 Ответ

0 голосов
/ 04 июля 2019

Задача в вашем случае - иметь возможность выполнять запрос динамически, и это потому, что вы не можете использовать экземпляр SparkContext или SqlContext в коде исполнителя. Эта проблема хорошо известна и обсуждается здесь .

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

Или вы можете использовать клиент, который используется в Spark org.apache.spark.sql.hive.client.HiveClient:

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

...