USQL + Python - 架构不匹配定义

时间:2017-12-11 17:19:54

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

我正在尝试将数据传递到Data Lake Analytics中的python脚本。

我已将其剥离,以清楚地显示错误。我知道python实际上并没有做任何事情......: - )

我有一个非常简单的表

@FormattedCasinoData =
    SELECT int.Parse(UserID) AS [UserID],
           int.Parse(ModelID) AS [ModelID],
           float.Parse(Value) AS [Value]
    FROM @CasinoData
    WHERE UserID != "UserID"
    ORDER BY UserID
    FETCH 1000 ROWS;

因此表格式为int,int,float。

当我尝试运行此

REFERENCE ASSEMBLY [ExtPython];

DECLARE @myScript = @"
def usqlml_main(df):
    return df
";

@pythonOutput  =
    REDUCE @FormattedCasinoData ON [UserID]
    PRODUCE [UserID] int, [ModelID] int, [Value] float
    USING new Extension.Python.Reducer(pyScript:@myScript);

OUTPUT @pythonOutput
  TO @"adl://mydatalake.azuredatalakestore.net/myFolder/PythonOutput20171208.csv"
  USING Outputters.Csv();

我收到以下错误:

" Python返回的数据帧架构(System.Int32,System.Int32,System.Double)确实匹配U-SQL架构(System.Int32,System.Int32,System.Single)"

任何想法为什么U-SQL架构期望System.Single为第三列,当我明确定义" float"在输出中。

谢谢!

1 个答案:

答案 0 :(得分:1)

很抱歉迟到的回复。这肯定已经过去了。

在C#中,floatSystem.Single的同义词(请参阅https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/float)。

您应该在reducer的架构中指定double作为目标类型。