U-SQL - 如何为慢速 UDF 增加并行度
U-SQL - How to increase parallelizm for a slow UDF
我正在处理 table "Content" 用户定义函数 "TrasformData"
@result =
SELECT Id,
TrasformData(Data) AS TrasformedData
FROM Content;
table "Content" 很大(大约 100M 条记录),"TrasformData" 功能很慢。该功能非常复杂,一条记录大约需要20毫秒。
Azure Data Lake 默认将我的查询拆分为 25 个顶点。这不够。完成 25 AU 可能需要几个小时。我想为这个过程分配至少 200 个 AU,并尽快完成它。据我所知,为这个查询分配超过 25 个 AU 直到它分裂成 25 个顶点是没有用的。
我能否以某种方式提高查询的并行度?谁能帮我解决这个问题?任何选项都是acceptable.
您可以通过三个选项来提高作业的并行度。
第一个是增加 Content
table 的分布桶数(假设您使用的是 table,您关于 25 个顶点的陈述似乎表明了这一点)。
如果您使用 HASH
分布,您可以通过添加 INTO x
子句指定更大的数字(其中 x 是桶的数量,应该小于大约 2000)。
其他两个选项类似:使用提示来欺骗系统使用更多节点。
一种是对先前的结果使用数据提示来声明它 returns 确实有大量行。这将欺骗系统 re-partition 数据并将扩展未来的处理(将数字调整为您满意的数字):
@content = SELECT * FROM Content OPTION(ROWSIZE=1000000000);
@result = SELECT id, TransformData(Data) AS TransformData FROM @content;
另一种是显式更改分区:
@content =
SELECT *
FROM Content
OPTION(PARTITION(id)=(PARTITIONCOUNT=100));
@result = SELECT id, TransformData(Data) AS TransformData FROM @content;
然而,这两种方法都为您提供固定分配,如果您的数据较少,则分配过度;如果数据多,则分配不足。
我正在处理 table "Content" 用户定义函数 "TrasformData"
@result =
SELECT Id,
TrasformData(Data) AS TrasformedData
FROM Content;
table "Content" 很大(大约 100M 条记录),"TrasformData" 功能很慢。该功能非常复杂,一条记录大约需要20毫秒。
Azure Data Lake 默认将我的查询拆分为 25 个顶点。这不够。完成 25 AU 可能需要几个小时。我想为这个过程分配至少 200 个 AU,并尽快完成它。据我所知,为这个查询分配超过 25 个 AU 直到它分裂成 25 个顶点是没有用的。
我能否以某种方式提高查询的并行度?谁能帮我解决这个问题?任何选项都是acceptable.
您可以通过三个选项来提高作业的并行度。
第一个是增加 Content
table 的分布桶数(假设您使用的是 table,您关于 25 个顶点的陈述似乎表明了这一点)。
如果您使用 HASH
分布,您可以通过添加 INTO x
子句指定更大的数字(其中 x 是桶的数量,应该小于大约 2000)。
其他两个选项类似:使用提示来欺骗系统使用更多节点。
一种是对先前的结果使用数据提示来声明它 returns 确实有大量行。这将欺骗系统 re-partition 数据并将扩展未来的处理(将数字调整为您满意的数字):
@content = SELECT * FROM Content OPTION(ROWSIZE=1000000000);
@result = SELECT id, TransformData(Data) AS TransformData FROM @content;
另一种是显式更改分区:
@content =
SELECT *
FROM Content
OPTION(PARTITION(id)=(PARTITIONCOUNT=100));
@result = SELECT id, TransformData(Data) AS TransformData FROM @content;
然而,这两种方法都为您提供固定分配,如果您的数据较少,则分配过度;如果数据多,则分配不足。