【问题标题】:How to add columns from multiple files in U-SQL in ADLA?如何在 ADLA 的 U-SQL 中从多个文件中添加列?
【发布时间】:2017-03-21 19:28:39
【问题描述】:

我在 Azure 数据湖中有很多 csv 文件,其中包含各种类型的数据(例如压力、温度、真/假)。它们都带有时间戳,我需要根据时间戳将它们收集到一个文件中以用于机器学习。这在 Java 中很容易做到——启动一个文件流,在打开每个文件的文件夹上运行一个循环,比较时间戳以将相关值写入输出文件,开始一个新列(到第一行的末尾)每个文件。 虽然我已经解决了 U-SQL 中的时间戳问题,但我在想出有助于我在整个文件夹上运行它的语法时遇到了麻烦。通配符语法 {*} 将所有文件视为同一个文件集,而我需要运行某种循环来单独加入每个文件中的列。 有没有办法做到这一点,也许使用虚拟列?

【问题讨论】:

    标签: azure azure-data-lake u-sql


    【解决方案1】:

    首先,您必须以函数式/声明式的方式考虑您的问题,而不是基于循环等程序范式。

    让我尝试改写您的问题,看看我是否可以提供帮助。您有许多带有时间戳数据的 csv 文件。不同的文件可以具有具有相同时间戳的行,并且您希望将具有相同时间戳(或时间戳范围)的所有行输出到特定文件?所以你基本上想重新分区数据?

    每个文件的格式是什么?它们都有相同的模式还是不同的模式?在后一种情况下,您如何区分它们?基于文件名?

    如果这是否是正确的声明性重述以及我的问题的答案,请在 cmets 中告诉我,我将在下一步中补充我的答案。

    【讨论】:

    • 谢谢!当然,我肯定无法解决这个问题。每个文件的格式由两列或三列组成。时间戳 - 值 - 单位。单位列可能存在也可能不存在(例如,对于 True/False 字段)。每个文件不是相同的单元/字段。例如,一个文件可能是温度和另一个气压以及另一个真/假。我正在寻找组合这些单独的文件,以便每个字段都是一个单独的列,并由最接近的时间戳进行协调。每个文件的时间戳并不完全相同。我说得通吗?
    • 我确实有同样的情况,很多文件,文件名不同,我可以想出一个文件作为输出,但是行被堆叠而不是合并,换句话说,它不关心模式的差异,什么是合并许多具有不同模式的文件的好方法,以便将所有这些文件合并到一个文件中,假设某些文件中不存在的列将为 NULL或为空。
    • 抱歉@AnzahHayat 回复晚了。在您的情况下,您可以编写一个自定义提取器。如果已知所有可能的单元/字段类型,则可以编写以下形式的查询:EXTRACT timestamp DateTime, airpressure int, temperature decimal, … FROM "input\{*}.dat" USING new MyExtractors.Extractor(); 如果字段未知,则可以使用SqlMap<string, string> 获取值。见blogs.msdn.microsoft.com/mrys/2016/08/15/…
    • 时间戳分组可以在单独的Reducer或窗口函数中完成,具体取决于分组的语义。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-29
    • 1970-01-01
    • 2020-02-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    相关资源
    最近更新 更多