gpt4 book ai didi

c# - USQL 执行缓慢

转载 作者:行者123 更新时间:2023-11-30 16:46:19 28 4
gpt4 key购买 nike

我创建了一个简单的脚本来对两个字符串进行评分。请在下面找到 USQL 和后端 .net 代码

CN_Matcher.usql:

REFERENCE ASSEMBLY master.FuzzyString;

@searchlog =
EXTRACT ID int,
Input_CN string,
Output_CN string
FROM "/CN_Matcher/Input/sample.txt"
USING Extractors.Tsv();

@CleansCheck =
SELECT ID,Input_CN, Output_CN, CN_Validator.trial.cleanser(Input_CN) AS Input_CN_Cleansed,
CN_Validator.trial.cleanser(Output_CN) AS Output_CN_Cleansed
FROM @searchlog;

@CheckData= SELECT ID,Input_CN, Output_CN, Input_CN_Cleansed, Output_CN_Cleansed,
CN_Validator.trial.Hamming(Input_CN_Cleansed, Output_CN_Cleansed) AS HammingScore,
CN_Validator.trial.LevinstienDistance(Input_CN_Cleansed, Output_CN_Cleansed) AS LevinstienDistance,
FuzzyString.ComparisonMetrics.JaroWinklerDistance(Input_CN_Cleansed, Output_CN_Cleansed) AS JaroWinklerDistance
FROM @CleansCheck;

OUTPUT @CheckData
TO "/CN_Matcher/CN_Full_Run.txt"
USING Outputters.Tsv();

CN_Matcher.usql.cs:

using Microsoft.Analytics.Interfaces;
using Microsoft.Analytics.Types.Sql;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;

namespace CN_Validator
{
public static class trial
{

public static string cleanser(string val)
{
List<string> wordsToRemove = "l.p. registered pc bldg pllc lp. l.c. div. national l p l.l.c international r. limited school azioni joint co-op corporation corp., (corp) inc., societa company llp liability l.l.l.p llc bancorporation manufacturing c dst (inc) jv ltd. llc. technology ltd., s.a. mfg rllp incorporated per venture l.l.p c. p.l.l.c l.p.. p. partnership corp co-operative s.p.a tech schl bancorp association lllp n r ltd inc. l.l.p. p.c. co district int intl assn. sa inc l.p co, co. division lc intl. lp professional corp. a l. l.l.c. building r.l.l.p co.,".Split(' ').ToList();
return string.Join(" ", val.ToLower().Split(' ').Except(wordsToRemove));
}

public static int Hamming(string source, string target)
{
int distance = 0;
if (source.Length == target.Length)
{
for (int i = 0; i < source.Length; i++)
{
if (!source[i].Equals(target[i]))
{
distance++;
}
}
return distance;
}
else { return 99999; }
}

public static int LevinstienDistance(string source, string target)
{
int n = source.Length;
int m = target.Length;
int[,] d = new int[n + 1, m + 1]; // matrix
int cost; // cost
// Step 1
if (n == 0) return m;
if (m == 0) return n;
for (int i = 0; i <= n; d[i, 0] = i++) ;
for (int j = 0; j <= m; d[0, j] = j++) ;
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= m; j++)
{
cost = (target.Substring(j - 1, 1) == source.Substring(i - 1, 1) ? 0 : 1);
d[i, j] = System.Math.Min(System.Math.Min(d[i - 1, j] + 1, d[i, j - 1] + 1),
d[i - 1, j - 1] + cost);
}
}
return d[n, m];
}

}
}

我运行了一个包含 100 个输入的样本批处理,并将并行度设置为 1,将优先级设置为 1000。作业在 1.6 分钟内完成

我想用 1000 个输入测试同一个作业,并将并行度设置为 1,将优先级设置为 1000,根据我的计算因为 100 个输入需要 1.6 分钟,我认为 1000 个输入需要大约 20 分钟,但是它运行了 50 多分钟,但我没有看到任何进展

所以我又添加了 100 个输入作业并测试它运行与上次相同。所以我想到增加并行度并将其增加到 3 并再次运行它甚至在 1 小时后仍未完成。

JOB_ID=07c0850d-0770-4430-a288-5cddcfc26699

主要问题是我看不到任何进度或状态。

如果我做错了什么,请告诉我。

在 USQL 中是否可以使用构造函数?因为如果我能够做到这一点,我就不需要一次又一次地执行相同的清洁步骤。

最佳答案

我假设您正在使用文件集语法来指定 1000 个文件?不幸的是,当前文件集的默认实现不能很好地扩展,编译(准备)阶段将花费很长时间(执行也是如此)。我们目前在预览中有更好的实现。能否给我发邮件到 Microsoft dot com 的 usql,我会告诉您如何试用预览版实现。

谢谢迈克尔

关于c# - USQL 执行缓慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40529157/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com