使用Hive表迭代Spark数据框架

时间:2018-05-30 10:36:04

标签: apache-spark hive pyspark apache-spark-sql hiveql

我有一个非常大的csv文件,所以我使用了spark并将其加载到spark数据帧中 我需要从csv上的每一行中提取纬度和经度,以便创建一个folium地图 与熊猫我可以通过循环解决我的问题:

for index, row in locations.iterrows():    

    folium.CircleMarker(location=(row["Pickup_latitude"],
                              row["Pickup_longitude"]),
                    radius=20,
                    color="#0A8A9F",fill=True).add_to(marker_cluster)

我发现与pandas数据帧不同,spark数据帧不能由loop => how to loop through each row of dataFrame in pyspark处理。

所以我认为我能够产生问题并将大数据切换成蜂巢表然后迭代它们。

是否可以在hive表中剪切庞大的SPARK数据帧,然后用循环迭代行?

1 个答案:

答案 0 :(得分:1)

通常,您不需要迭代DataFrame或RDD。您只需创建将应用于每条记录的transformations(如地图),然后调用一些action来调用该处理。

您需要以下内容:

dataframe.withColumn("latitude", <how to extract latitude>)
         .withColumn("longitude", <how to extract longitude>)
         .select("latitude", "longitude")
         .rdd
         .map(row => <extract values from Row type>)
         .collect()         // this will move data to local collection

如果您无法使用SQL执行此操作,则需要使用RDD执行此操作:

dataframe
     .rdd
     .map(row => <create new row with latitude and longitude>)
     .collect()