【问题标题】:Azure Data Lake Analytics: Combine overlapping time duration using U-SQLAzure 数据湖分析:使用 U-SQL 组合重叠持续时间
【发布时间】:2016-02-25 10:37:21
【问题描述】:

我想使用 U-SQL 从放置在 Azure Data Lake Store 中的 CSV 数据中删除重叠的持续时间,然后合并这些行。数据集包含开始时间和结束时间以及每条记录的其他几个属性。这是一个例子:

Start Time - End Time - Usar Name
5:00 AM - 6:00 AM - ABC
5:00 AM - 6:00 AM - XYZ
8:00 AM - 9:00 AM - ABC
8:00 AM - 10:00 AM - ABC
10:00 AM - 2:00 PM - ABC
7:00 AM - 11:00 AM - ABC
9:00 AM - 11:00 AM - ABC
11:00 AM - 11:30 AM - ABC

去除重叠后,输出数据集如下所示:

Start Time - End Time - Usar Name
5:00 AM - 6:00 AM - ABC
5:00 AM - 6:00 AM - XYZ
7:00 AM - 2:00 PM - ABC

请注意,CSV 包含大量数据并且包含数 GB 大小。我正在尝试解决这个问题,但没有运气。我想避免为 Azure Data Lake Analytics 作业使用 U-SQL 用户定义的运算符,并从 U-SQL 中寻找一些有效的解决方案。

【问题讨论】:

    标签: c# logic cortana-intelligence azure-data-lake u-sql


    【解决方案1】:

    您似乎想要汇总提供重叠时间范围的行的所有数据?或者您想对其他列中的数据做什么?

    乍一看,我建议您使用用户定义的 REDUCER 或用户定义的聚合器,具体取决于您希望使用其他数据实现的目标。

    但是,我看到的一个问题是您可能需要一个定点递归来创建常见的重叠范围。不幸的是,U-SQL(也没有 Hive)中没有定点递归,因为递归的横向扩展处理不能有效地完成。

    澄清后更新

    我认为这更容易。您只需取开头的最小值和结尾的最大值,然后按键值分组:

    @r = EXTRACT begin DateTime, end DateTime,
                 data string
         FROM "/temp/ranges.txt"
         USING Extractors.Text(delimiter:'-');
    
    @r = SELECT MIN(begin) AS begin,
                MAX(end) AS end,
                data
         FROM @r
         GROUP BY data;
    
    OUTPUT @r
    TO "/temp/result.csv"
    USING Outputters.Csv();
    

    请注意,这仅适用于您的范围在同一天且不跨越午夜的情况。

    更新了一个为用户处理不相交范围的解决方案 您可以使用用户定义的减速器来解决它。以下博客文章解释了解决方案的详细信息并提供了 GitHub 代码的链接:https://blogs.msdn.microsoft.com/mrys/2016/06/08/how-do-i-combine-overlapping-ranges-using-u-sql-introducing-u-sql-reducer-udos/

    【讨论】:

    • 感谢 Michael 如此快速的回复。我在我的问题中更新了我的例子。每条记录代表一个用户。我想根据用户数据汇总所有记录。
    • 这看起来是一个更简单的问题。更新了我的答案。如果它回答了您的问题,请标记为答案:)。
    • 实际上这并没有给你完全正确的答案,因为我拥有的解决方案也将合并非重叠间隔。所以回到绘图板......
    • 您认为用户定义的 reducer 或 aggregator 对这项任务有帮助吗?我想知道是否有任何样本缩减器或聚合器可用于帮助/入门?
    • 花了一点时间,但我在blogs.msdn.microsoft.com/mrys/2016/06/08/…发表了一篇关于使用减速器的解决方案的博客文章
    猜你喜欢
    • 1970-01-01
    • 2018-10-02
    • 1970-01-01
    • 1970-01-01
    • 2017-07-26
    • 1970-01-01
    • 1970-01-01
    • 2016-04-23
    • 1970-01-01
    相关资源
    最近更新 更多