U-SQL + Python基本问题

时间:2017-06-09 17:11:16

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

我刚刚开始学习如何将Python与U-SQL集成。我正在研究这个例子:

REFERENCE ASSEMBLY [ExtPython];

DECLARE @myScript = @"
def get_mentions(tweet):    
      return ';'.join( ( w[1:] for w in tweet.split() if w[0]=='@' ) )

def usqlml_main(df):    
      del df['time']    
      del df['author']    
      df['mentions'] = df.tweet.apply(get_mentions)    
      del df['tweet']    
      return df
";

@t  =     
SELECT * FROM        
(VALUES
           ("D1","T1","A1","@foo Hello World @bar"),
           ("D2","T2","A2","@baz Hello World @beer")
       ) AS
            D( date, time, author, tweet );
@m  =
    REDUCE @t ON date
    PRODUCE date string, mentions string
    USING new Extension.Python.Reducer(pyScript:@myScript);

OUTPUT @m
    TO "/tweetmentions.csv"
    USING Outputters.Csv();

在usqlml_main中,什么是' apply'函数在df.tweet.apply(get_mentions)?

另外,REDUCE在这种情况下做了什么?将U-SQL与Python集成时总是需要它吗?

1 个答案:

答案 0 :(得分:4)

问:usqlml_main如何接受数据帧? D(日期,时间,作者,推文)是否构建了pandas dataFrame?

当Extension.Python.Reducer使用行集@t时,行将放入pandas dataFrame。

问:在usqlml_main中,df.tweet.apply(get_mentions)中的'apply'函数是什么?

这是在DataFrames上定义的pandas apply()方法:https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.apply.html

问:REDUCE在这种情况下做了什么?将U-SQL与Python集成时总是需要它吗?

需要减少。在这种情况下,它的名称“REDUCE”具有误导性。在U-SQL / Python上下文中REDUCE的目的是REDUCE用于根据来自特定列的键值将大量行分配到较小的分区中。在上面的示例中,它尝试在日期列上进行分区。 REDUCE并不意味着代码实际上必须返回“减少”的行集。实际上,reduce可以返回更多的行。同样,它更多的是数据分区。