我想在以下RDD中转换字符串元素
data0 = sc.parallelize( [('0', '2.023'), ('0.2', '4.235'), ('1.23', '0.45'), ('1.23', '10.2'), ('1.0', '20.0')] )
为数值。所以预期的输出是
[(0, 2.023), (0.2, 4.235), (1.23, 0.45), (1.23, 10.2), (1.0, 20.0)]
我试过了
data0.map(lambda x: x.split(',')).map(lambda x: (float(x[0]),float(x[1])))
和
data0.map(lambda line: line.split(",")).map(lambda numbers: Vectors.dense(numbers.map(_.toInt)))
在将字符串RDD转换为Int RDD中。但是,他们都不起作用。
我知道也许有一些方法可以先将RDD转换为数据帧,然后再进行。如果我想在RDD中完成任务而不将其更改为数据帧(因为可能非常耗时)怎么办,该怎么办?这只是一个例子。在更一般的情况下,假设一行中有很多元素,这使您无法一一列出。那我们该怎么办呢?
谢谢。
您正在尝试用逗号分割元组。字符串可以用逗号分隔。"0.01, 0.02".split(",")
会回来的["0.01", "0.02"]
。但是您已经有了一个tuple ("0.01", "0.02")
,只需要将两个元素都转换为float即可。您正在编写正确的代码,只是由于代码失败而采取了多余的第一步。
为我工作:
data0 = sc.parallelize([('0', '2.023'), ('0.2', '4.235'), ('1.23', '0.45'), ('1.23', '10.2'), ('1.0', '20.0')])
data0.take(5)
# [('0', '2.023'), ('0.2', '4.235'), ('1.23', '0.45'), ('1.23', '10.2'), ('1.0', '20.0')]
# Convert to float
data0.map(lambda x: (float(x[0]), float(x[1]))).take(5)
# [(0.0, 2.023), (0.2, 4.235), (1.23, 0.45), (1.23, 10.2), (1.0, 20.0)]
如果要归纳到元素的所有元素tuple
:
data0.map(lambda x: tuple([float(i) for i in x]))
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句