Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 串(带分数)在火花中加倍_Apache Spark - Fatal编程技术网

Apache spark 串(带分数)在火花中加倍

Apache spark 串(带分数)在火花中加倍,apache-spark,Apache Spark,我的数据框中有一列,其中包含99230/256等值。这是一个带分数的字符串。它的双重表示形式是99.8984375 如何应用转换,将此类字符串转换为Spark中的Double?我使用的是Spark 1.6.2注意:您必须定义自己的函数才能应用于数据。Spark只是使用它,它不是一个内置的功能来满足您的要求 由于您没有指定要使用的API,下面是一个简单集合上的Python答案 此外,您可以完全在Spark之外运行和测试此功能 def convertFrac(frac): parts = f

我的数据框中有一列,其中包含
99230/256
等值。这是一个带分数的字符串。它的双重表示形式是
99.8984375


如何应用转换,将此类字符串转换为Spark中的Double?我使用的是Spark 1.6.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]

警告,这并不适用于所有输入(特别是像
“-23/5”
这样的负片需要写成
“-2-3/5”
)-这只是您需要做的一个示例

注意:您必须定义自己的函数才能应用于数据。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]

警告,这并不适用于所有输入(特别是像
“-23/5”
这样的负片需要写成
“-2-3/5”
)-这只是您需要做的一个示例

您需要创建一个udf来解析它,计算分数值并返回一个double.Yes。我同意。我想看看是否可以用任何预定义的方法来处理这个问题,但是你是对的。你需要创建一个udf来解析它,计算分数值并返回一个double。是的。我同意。我想看看这是否可以通过任何预定义的方法来处理,但你是正确的。我使用的是Scala API,但这肯定有帮助。也没有负值的范围,所以你的函数工作得很完美。另外,我选择了在
sparksql
select
子句中操作列(不确定这是否是个好主意),但我发现在sql中操作该列要容易得多(尽管是个人偏好!)。谢谢你的密码,明白了。是的,只是简单的值转换和字符串拆分。没什么太复杂的。我正在使用Scala API,但这肯定会有所帮助。也没有负值的范围,所以你的函数工作得很完美。另外,我选择了在
sparksql
select
子句中操作列(不确定这是否是个好主意),但我发现在sql中操作该列要容易得多(尽管是个人偏好!)。谢谢你的密码,明白了。是的,只是简单的值转换和字符串拆分。没什么太复杂的。