我正在尝试使用U-SQL删除csv文件中称为“函数”的特定列中的重复,空值和Nan单元格。在删除空白行之后,我还想使Product列与Function列正确对齐。因此,我想像在“功能”列中一样删除“产品”列中的相同行,以使它们正确对齐。我只想保留一个重复的功能行。在这种情况下,我只想保留第一次出现的情况。 “产品”列没有空单元格,并且具有所有唯一值。任何帮助是极大的赞赏。我知道可以通过一种更简单的方式来完成此操作,但是随着DataLake中的数据随时间变化,我想使用代码来自动化该过程。我想我现在的代码有点接近。实际的数据集是一个非常大的文件,我可以肯定的是,Functions列中至少有4个重复值,这些值不仅仅是空单元格。我需要消除功能列中的重复值和空单元格,因为空单元格也被识别为重复项。我希望能够在我的学校项目的下一步(不包括“产品”列)中将“功能”值用作主键。
DECLARE @inputfile string = "/input/Function.csv";
//DECLARE @OutputUserFile string = "/output/Test_Function/UniqueFunction.csv";
@RawData =
EXTRACT Function string,
Product string
FROM @inputfile
USING Extractors.Csv(encoding: Encoding.[ASCII]);
// Query from Function data
// Set ROW_NUMBER() of each row within the window partitioned by Function field
@RawDataDuplicates=
SELECT ROW_NUMBER() OVER (PARTITION BY Function) AS RowNum, Function AS function
FROM @RawData;
// ORDER BY Function to see duplicate rows next to one another
@RawDataDuplicates2=
SELECT *
FROM @RawDataDuplicates
ORDER BY function
OFFSET 0 ROWS;
// Write to File
//OUTPUT @RawDataDuplicates2
//TO "/output/Test_Function/FunctionOver-Dups.csv"
//USING Outputters.Csv();
// GROUP BY and count # of duplicates per Function
@groupBy = SELECT Function, COUNT(Function) AS FunctionCount
FROM @RawData
GROUP BY Function
ORDER BY Function
OFFSET 0 ROWS;
// Write to file
//OUTPUT @groupBy
//TO "/output/Test_Function/FunctionGroupBy-Dups.csv"
//USING Outputters.Csv();
@RawDataDuplicates3 =
SELECT *
FROM @RawDataDuplicates2
WHERE RowNum == 1;
OUTPUT @RawDataDuplicates3
TO "/output/Test_Function/FunctionUniqueEmail.csv"
USING Outputters.Csv(outputHeader: true);
//OUTPUT @RawData
//TO @OutputUserFile
//USING Outputters.Csv(outputHeader: true);
我也注释掉了一些我不必要的代码。当我按原样运行代码时,当前正在收到此错误:此E_CSC_USER_REDUNDANTSTATEMENTINSCRIPT,错误消息:该语句为无效代码。– 它没有给出行号,但可能给出“ Function AS function”行?
这是一个示例文件,是整个电子表格的一小部分,仅在2个相关列中包含数据。完整的电子表格在所有列中都有数据。 https://www.dropbox.com/s/auu2aco4b037xn7/Function.csv?dl=0
答案 0 :(得分:2)
您可以使用.Length
这样的字符串函数和ROW_NUMBER
这样的排名函数对数据进行一系列转换,以删除所需的记录,例如:
@input =
EXTRACT
CompanyID string,
division string,
store_location string,
International_Id string,
Function string,
office_location string,
address string,
Product string,
Revenue string,
sales_goal string,
Manager string,
Country string
FROM "/input/input142.csv"
USING Extractors.Csv(skipFirstNRows : 1 );
// Remove empty columns
@working =
SELECT *
FROM @input
WHERE Function.Length > 0;
// Rank the columns by Function and keep only the first one
@working =
SELECT CompanyID,
division,
store_location,
International_Id,
Function,
office_location,
address,
Product,
Revenue,
sales_goal,
Manager,
Country
FROM
(
SELECT *,
ROW_NUMBER() OVER(PARTITION BY Function ORDER BY Product) AS rn
FROM @working
) AS x
WHERE rn == 1;
@output = SELECT * FROM @working;
OUTPUT @output TO "/output/output.csv"
USING Outputters.Csv(quoting:false);