在机器学习PAI我想用这个组件来统计每个字段的有效值个数,怎么处理?[阿里云机器学习PAI]

在机器学习PAI当使用全表统计SummarizerBatchOp时,如果源表都是字符串类型的字段,调用collectSummary方法,会报 java.lang.NumberFormatException: For input string: “[]” 我想用这个组件来统计每个字段的有效值个数,怎么处理?

「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
=====这是一个广告位,招租中,联系qq 78315851====
2 条回复 A 作者 M 管理员
  1. 在阿里云机器学习PAI中,如果您想要统计每个字段的有效值个数,可以使用数据处理(DataWorks)组件来实现。下面是一些具体步骤:

    1. 在数据处理工作流程中添加 SQL 脚本

    首先,创建一个数据处理工作流程,然后将需要统计有效值个数的表添加到数据处理任务中。接着添加 SQL 脚本组件,将需要统计的字段按照正常的 SQL 语法选择出来。例如:

    SELECT count(DISTINCT column1) FROM table_name WHERE column1 IS NOT NULL;

    在上述 SQL 脚本中,table_name 为需要统计的表名,column1 为需要统计的字段名。使用 DISTINCTcount() 函数可以统计字段的唯一非空值数量。

    1. 添加输出节点

    完成 SQL 脚本编写后,在数据处理工作流中添加输出节点。这个节点的作用是将结果输出到指定的位置,例如写入到阿里云 OSS 的某个文件中。

    1. 运行并查看结果

    添加完成输出节点后,运行数据处理任务,查看结果是否与预期一致。如果统计结果不符合预期,您可以检查 SQL 脚本是否正确,并且确保输入数据不会产生误差。

  2. 根据您提供的信息,我了解到您想使用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组件计算的是每个字段的唯一值数量,而不是有效值数量。如果您需要计算每个字段的有效值数量,您需要先处理数据并删除无效值,然后再计算每个字段的唯一值数量。

  3. 是的,多谢反馈。现在是有这个问题,下个版本这个问题就会fix。此回答整理自钉群“Alink开源–用户群”