我正在尝试将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()
答案 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方式遍历结果。