我有一个非常大的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数据帧,然后用循环迭代行?
答案 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()