PySpark如何将rdd转换为字符串

2024-05-16 10:07:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要在一个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

搜索结果:

^{pr2}$

我的网址格式如下:

http://127.0.0.1/match/v1/driving/-73.57534790039062,45.5311393737793; -73.574951171875,45.529457092285156,-73.5749282836914,45.52922821044922;-73.57501220703125,45.52901077270508

Tags: 字符串httpurl格式typematchisoall
2条回答

这里有一个纯粹的火花方法来做同样的事情(可能对更大的 RDD/不同的用例):

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]))

从您发布的片段中,all_coord_iso_rdd是一个rdd,其中每一行都是一个tuple(float, float)。调用take(n)将从rdd返回{}条记录。在

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。在

首先,您需要将float转换为str,然后我们可以使用","连接每个元组中的值。我们使用map(str, ...)将每个值映射到str。在

这就产生了:

^{2}$

最后,使用";"加入结果列表以获得所需的输出。在

print(";".join([",".join(map(str, item)) for item in x]))

相关问题 更多 >