Amazon web services AWS Glue应用程序从双精度映射到字符串
我在胶水作业上遇到了一些令人沮丧的问题 我有一个从爬虫创建的表。它通过一些CSV数据创建了一个模式。架构的某些元素需要修改,例如,将数字添加到字符串并应用标题 我似乎在这里遇到了一些问题——一些字段的模式似乎被选为双精度模式。当我尝试将其转换为我需要的字符串时,它包含一些空精度,例如1234-->1234.0 我拥有的映射代码类似于: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 = [
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更改类型,就像上面的解决方案一样。但在我的拼花输出中,整个列变为空