如何使用pyspark将sql语句的结果发送到for循环?

时间:2018-11-20 06:53:58

标签: python apache-spark pyspark pyspark-sql

我正在尝试将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 :(得分:2)

  • 使用DataFrame.collect() method,它将来自所有执行者Spark-SQL查询结果汇总到 driver 中。

  • collect()方法将返回一个Python list,其每个元素是一个Spark Row

  • 然后您可以在for循环中遍历此列表


代码段:

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

答案 1 :(得分:1)

我认为您需要问自己为什么要遍历数据。

您在进行汇总吗?转换数据?如果是这样,请考虑使用spark API。

打印一些文字?如果是这样,则使用.collect()并将数据取回驱动程序进程。然后,您可以按照通常的python方式遍历结果。