Как отправить результат оператора SQL в цикл for с помощью pyspark? - PullRequest
0 голосов
/ 20 ноября 2018

Я пытаюсь отправить результат sql в цикл for.Я новичок в Spark и Python, пожалуйста, помогите.

    from pyspark import SparkContext
sc =SparkContext()
from pyspark.sql import HiveContext
hive_context = HiveContext(sc)
#bank = hive_context.table("cip_utilities.file_upload_temp")
data=hive_context.sql("select * from cip_utilities.cdm_variable_dict")
hive_context.sql("describe cip_utilities.cdm_variables_dict").registerTempTable("schema_def")
temp_data=hive_context.sql("select * from schema_def")
temp_data.show()
data1=hive_context.sql("select col_name from schema_def where data_type<>'string'")
data1.show()

Ответы [ 2 ]

0 голосов
/ 20 ноября 2018

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

Вы делаете агрегацию?Преобразование данных?Если это так, подумайте об этом, используя API-интерфейс spark.

Печать текста?Если это так, используйте .collect () и получите данные обратно в процесс драйвера.Затем вы можете зациклить результат обычным способом Python.

0 голосов
/ 20 ноября 2018
  • Используйте DataFrame.collect() метод , который объединяет результат запроса Spark-SQL от всех исполнителей в драйвер .

  • Метод collect() вернет Python list, каждый элемент которого равен Spark Row

  • Затем вы можете перебрать этот список в for -loop


Фрагмент кода:

data1 = hive_context.sql("select col_name from schema_def where data_type<>'string'")
colum_names_as_python_list_of_rows = data1.collect()
...