Spark HiveContext применить операцию IN с использованием метода sql - PullRequest
0 голосов
/ 27 мая 2020

У меня есть таблица кустов сотрудников со столбцами Name, Department, City, и я хочу получить данные на основе имен сотрудников, использующих операцию IN в HiveContext. sql (), но она выдает исключение pyspark.Analysis. пожалуйста, посмотрите на пример ниже.

таблица сотрудников:

Name   Department  City
Ram     FDE        Mumbai
Ramesh  CTZ        Pune
Suraj   FDE        Chennai
Varun   CTZ        Delhi

Запрос:

SELECT * from employee WHERE Name in ('Ramesh' , 'Varun')

фрагмент кода из программы Spark:

namesList= ['Ramesh' , 'Varun']
data = HiveContext.sql('SELECT * from employee WHERE Name in ({namesList})'.format(namesList = namesList))

Я попытался изменить и передать строки вместо списка, но ошибка остается той же

Error:pyspark.AnalysisException : structType field

пожалуйста, помогите мне в этом и посоветуйте мне, если я здесь что-то делаю не так.

Ответы [ 2 ]

1 голос
/ 27 мая 2020

Замените это

data = HiveContext.sql('SELECT * from employee WHERE Name in ({namesList})'.format(namesList = namesList))

на это

data = HiveContext.sql("SELECT * from employee WHERE Name in ({namesList})".format(namesList = "'"+"','".join(namesList)+"'"))

Вам нужно передать строку, а не список.

1 голос
/ 27 мая 2020

Вы должны избавиться от квадратных скобок в списке python при создании запроса - str(namesList)[1:-1]

data = HiveContext.sql('SELECT * from employee WHERE Name in ({namesList})'.format(namesList = str(namesList)[1:-1]))
...