Как форматирование строк работает в операторе spark. sql в PySpark? - PullRequest
0 голосов
/ 11 марта 2020

Я работаю с Pyspark и пишу запрос с использованием spark. sql. Я хочу выбрать значения из массива, объявленного где-то еще, чтобы избежать повторного ввода имен всех строк.

Вот моя попытка, но она не работает.

array_fields = ["cat", "dog"]  
ans= spark.sql("""select {} from <table_name>.format(",".join[array_fields]) """)

I ' мы также пытались

 ans= spark.sql("""select {} from <table_name> """).format(",".join[array_fields])

Что я здесь не так делаю?

Ответы [ 2 ]

1 голос
/ 11 марта 2020

Предполагая, что ваши примеры верны, так как вы на самом деле их пробовали, использование вами формата и соединения не совсем правильно.

Попробуйте:

array_fields = ["cat", "dog"]  
ans= spark.sql("""select {} from <table_name> """.format(",".join(array_fields)))

Различия:

  1. Метод форматирования применяется к строке, которую вы хотите отформатировать.
  2. Метод join - это вызов функции - его параметр должен быть в круглых скобках, а не в квадратных скобках (ваш второй пример) .
  3. Метод join не является частью строки (ваш первый пример).

Вы также можете - в первом случае - попробовать использовать print вместо прямого вызова spark.sql , То есть:

array_fields = ["cat", "dog"]  
print("""select {} from <table_name> """.format(",".join(array_fields)))

Таким образом, вы можете увидеть, что в конечном итоге вы передадите Спарк. когда вы будете готовы, просто замените print на ans = spark.sql и вы получите go.

0 голосов
/ 11 марта 2020

Требуется ли формат? Попробуйте использовать f-строку.

f"""SELECT {",".join(array_fields)} FROM <table_name>"""
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...