在机器学习PAI当使用全表统计SummarizerBatchOp时,如果源表都是字符串类型的字段,调用collectSummary方法,会报 java.lang.NumberFormatException: For input string: "[]" 我想用这个组件来统计每个字段的有效值个数,怎么处理?
在阿里云机器学习PAI中,如果您想要统计每个字段的有效值个数,可以使用数据处理(DataWorks)组件来实现。下面是一些具体步骤:
首先,创建一个数据处理工作流程,然后将需要统计有效值个数的表添加到数据处理任务中。接着添加 SQL 脚本组件,将需要统计的字段按照正常的 SQL 语法选择出来。例如:
SELECT count(DISTINCT column1) FROM table_name WHERE column1 IS NOT NULL;
在上述 SQL 脚本中,table_name
为需要统计的表名,column1
为需要统计的字段名。使用 DISTINCT
和 count()
函数可以统计字段的唯一非空值数量。
完成 SQL 脚本编写后,在数据处理工作流中添加输出节点。这个节点的作用是将结果输出到指定的位置,例如写入到阿里云 OSS 的某个文件中。
添加完成输出节点后,运行数据处理任务,查看结果是否与预期一致。如果统计结果不符合预期,您可以检查 SQL 脚本是否正确,并且确保输入数据不会产生误差。
根据您提供的信息,我了解到您想使用SummarizerBatchOp组件来统计每个字段的有效值个数。但是,当源表中的所有字段都是字符串类型时,使用collectSummary方法会导致java.lang.NumberFormatException异常。这是因为SummarizerBatchOp组件的collectSummary方法需要在源表中至少有一个数值型字段才能正常工作。
如果您想统计每个字段的有效值个数,您可以考虑使用DistinctCountBatchOp组件。DistinctCountBatchOp组件可以计算每个字段的唯一值数量,包括字符串类型的字段。以下是一个简单的例子:
from pyalink.alink import *
from pyalink.alink.batch import DistinctCountBatchOp
# 读取源表
source = CsvSourceBatchOp() \
.setFilePath("source.csv") \
.setFieldDelimiter(",") \
.setSchemaStr("f0 string, f1 string, f2 string")
# 计算每个字段的唯一值数量
distinct_count = DistinctCountBatchOp() \
.setSelectedCols(["f0", "f1", "f2"]) \
.linkFrom(source) \
.collect()
# 输出结果
for col in distinct_count:
print(col)
在这个例子中,我们首先读取了源表,然后使用DistinctCountBatchOp组件计算每个字段的唯一值数量。然后,我们遍历结果并输出每个字段的唯一值数量。
请注意,DistinctCountBatchOp组件计算的是每个字段的唯一值数量,而不是有效值数量。如果您需要计算每个字段的有效值数量,您需要先处理数据并删除无效值,然后再计算每个字段的唯一值数量。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
人工智能平台 PAI(Platform for AI,原机器学习平台PAI)是面向开发者和企业的机器学习/深度学习工程平台,提供包含数据标注、模型构建、模型训练、模型部署、推理优化在内的AI开发全链路服务,内置140+种优化算法,具备丰富的行业场景插件,为用户提供低门槛、高性能的云原生AI工程化能力。