Spark中的字符串(含分数)为Double

时间:2016-08-04 19:54:05

标签: apache-spark

我的DataFrame中有一个列,其中包含99 230/256之类的值。它是一个带分数的字符串。它的双重表示是99.8984375

如何在Spark中应用将此类字符串转换为Double的转换?我正在使用Spark 1.6.2

1 个答案:

答案 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") - 这只是您需要做的一个示例。