Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.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
Amazon web services AWS Glue应用程序从双精度映射到字符串_Amazon Web Services_Aws Glue - Fatal编程技术网

Amazon web services AWS Glue应用程序从双精度映射到字符串

Amazon web services AWS Glue应用程序从双精度映射到字符串,amazon-web-services,aws-glue,Amazon Web Services,Aws Glue,我在胶水作业上遇到了一些令人沮丧的问题 我有一个从爬虫创建的表。它通过一些CSV数据创建了一个模式。架构的某些元素需要修改,例如,将数字添加到字符串并应用标题 我似乎在这里遇到了一些问题——一些字段的模式似乎被选为双精度模式。当我尝试将其转换为我需要的字符串时,它包含一些空精度,例如1234-->1234.0 我拥有的映射代码类似于: applymapping1 = ApplyMapping.apply( frame = datasource0, mappings = [

我在胶水作业上遇到了一些令人沮丧的问题

我有一个从爬虫创建的表。它通过一些CSV数据创建了一个模式。架构的某些元素需要修改,例如,将数字添加到字符串并应用标题

我似乎在这里遇到了一些问题——一些字段的模式似乎被选为双精度模式。当我尝试将其转换为我需要的字符串时,它包含一些空精度,例如1234-->1234.0

我拥有的映射代码类似于:

applymapping1 = ApplyMapping.apply(
    frame = datasource0, 
    mappings = [
        ("col1","double","first_column_name","string"),
        ("col2","double","second_column_name","string")
    ], 
    transformation_ctx = "applymapping1"
 )
我对数据进行爬网后得到的结果表如下所示:

first_column_name    second_column_name
1234.0               4321.0
5678.0               8765.0
相对于

first_column_name    second_column_name
1234                 4321
5678                 8765

有没有解决这个问题的好方法?我曾尝试将爬虫程序最初创建的表中的模式更改为bigint而不是double,但当我将映射代码更新为(“col1”、“bigint”、“first\u column\u name”、“string”)时,该表最终为空。

可能您的数据确实是double类型(某些值可能有分数),这就是为什么更改类型会导致数据变为null。同样,当您将
double
字段的类型更改为
string
时,它会被一个十进制组件序列化——它仍然是一个double,只是打印出来的

您是否尝试过将值显式转换为整数

df2 = ResolveChoice.apply(datasource0, specs = [("col1", "cast:int"), ("col2", "cast:int")])
然后将大小写转换为字符串

df3 = ResolveChoice.apply(df2, specs = [("col1", "cast:string"), ("col2", "cast:string")])
或者使用
ApplyMapping
更改类型并重命名,就像上面所做的那样

df3 = ApplyMapping.apply(
frame = df2, 
mappings = [
    ("col1","int","first_column_name","string"),
    ("col2","int","second_column_name","string")
], 
transformation_ctx = "applymapping1"

)

仅需对两种技术的答案进行一点更正,实际上您必须同时执行ResolveChoice和ApplyMapping以确保正确的类型转换

ResolveChoice将确保列中只有一种类型。如果不执行此步骤,并且不解决歧义,则该列将成为一个结构,并且红移将在最后显示为null

因此,应用ResolveChoice以确保所有数据都是一种类型(int,对于ie)

df2=ResolveChoice.apply(数据源0,规格=[(“col1”,“cast:int”),(“col2”,“cast:int”)))

最后,使用ApplyMapping更改所需类型

df3 = ApplyMapping.apply(
frame = df2, 
mappings = [
    ("col1","int","first_column_name","string"),
    ("col2","int","second_column_name","string")
], 
transformation_ctx = "applymapping1")

希望这有帮助(:

您可能希望将dynamicframe转换为spark数据帧,然后使用字符串操作删除最后两个字符?我面临同样的问题。自动生成的粘合脚本使用ApplyMapping更改类型,就像上面的解决方案一样。但在我的拼花输出中,整个列变为空