簡體   English   中英

PySpark如何將RDD轉換為字符串

[英]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_rddrdd ,其中每一行都是一個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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM