[英]PySpark how to convert an rdd to string
我需要在url中傳遞坐標,但是我需要將rdd轉換為字符串並用分號分隔。
all_coord_iso_rdd.take(4)
[(-73.57534790039062, 45.5311393737793),
(-73.574951171875, 45.529457092285156),
(-73.5749282836914, 45.52922821044922),
(-73.57501220703125, 45.52901077270508)]
type(all_coord_iso_rdd)
pyspark.rdd.PipelinedRDD
結果查找:
"-73.57534790039062,45.5311393737793;-73.574951171875,45.529457092285156,
-73.5749282836914,45.52922821044922;-73.57501220703125,45.52901077270508"
我的網址格式應如下:
http://127.0.0.1/match/v1/driving/-73.57534790039062,45.5311393737793; -73.574951171875,45.529457092285156,-73.5749282836914,45.52922821044922;-73.57501220703125,45.52901077270508
在all_coord_iso_rdd
中,您發布了all_coord_iso_rdd
是rdd
,其中每一行都是一個tuple(float, float)
。 調用take(n)
從rdd
返回n
條記錄。
x = all_coord_iso_rdd.take(4)
print(x)
#[(-73.57534790039062, 45.5311393737793),
# (-73.574951171875, 45.529457092285156),
# (-73.5749282836914, 45.52922821044922),
# (-73.57501220703125, 45.52901077270508)]
返回的值只是一個浮點數元組的列表。 要將其轉換為所需的格式,我們可以在列表str.join
中使用str.join
。
首先,您需要將float
轉換為str
,然后我們可以使用","
每個元組中的值連接起來。 我們使用map(str, ...)
將每個值映射到str
。
這樣產生:
print([",".join(map(str, item)) for item in x])
#['-73.5753479004,45.5311393738',
# '-73.5749511719,45.5294570923',
# '-73.5749282837,45.5292282104',
# '-73.575012207,45.5290107727']
最后使用";"
加入結果列表 獲得所需的輸出。
print(";".join([",".join(map(str, item)) for item in x]))
這是執行此操作的純火花方式(對於較大的rdds /不同用例可能有用):
list=[(-73.57534790039062, 45.5311393737793),(-73.574951171875, 45.529457092285156),\
(-73.5749282836914, 45.52922821044922),(-73.57501220703125, 45.52901077270508)]
rdd=sc.parallelize(list)
rdd.map(lambda row: ",".join([str(elt) for elt in row]))\
.reduce(lambda x,y: ";".join([x,y]))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.