我的DataFrame中有一个列,其中包含99 230/256
之类的值。它是一个带分数的字符串。它的双重表示是99.8984375
。
如何在Spark中应用将此类字符串转换为Double的转换?我正在使用Spark 1.6.2
答案 0 :(得分:2)
注意:您必须定义自己的函数以应用于数据。 Spark只是使用它,它不是一个内置的功能来做你要求的。
由于您没有指定您正在使用的API,因此这是一个简单集合的Python答案。
此外,您可以在Spark之外完全运行并测试它。
def convertFrac(frac):
parts = frac.split()
whole = numer = 0
denom = 1
if len(parts) == 2:
whole = float(parts[0])
numer, denom = map(float, parts[1].split('/'))
elif len(parts) == 1:
if '/' in parts[0]:
numer, denom = map(float, parts[0].split('/'))
else:
return float(parts[0])
return whole + (numer / denom)
这是一个样本运行
>>> sc.parallelize(["99 230/256", "1/100"]).map(convertFrac).collect()
[99.8984375, 0.01]
警告,这不适用于所有输入(尤其是像"-2 3/5"
这样的负面内容需要写成"-2 -3/5"
) - 这只是您需要做的一个示例。