python - U-SQL + Python 基础题

标签 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 内部,df.tweet.apply(get_mentions) 中的“应用”函数是什么?

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

最佳答案

问:usqlml_main 如何接收数据帧? D(date, time, author, tweet) 是否构建了 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”具有误导性。 REDUCE 在 U-SQL/Python 上下文中的用途是 REDUCE 用于根据来自特定列的键值将大量行分布到较小的分区中。在上面的示例中,它试图在日期列上进行分区。 REDUCE 并不意味着代码实际上必须返回一组“减少”的行。事实上,reduce 可以返回更多的行。同样,它更多的是关于数据分区。

关于python - U-SQL + Python 基础题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44463364/

相关文章:

python - Django 的管理界面不应该用于什么?

python - Selenium Webdriver Firefox 52 Python 每次运行时选择随机代理

c# - VS 更新破坏了 microsoft.analytics.dll

python - 如何字符串格式 OptionParser() 帮助消息?

python - numpy.polyfit 与 scipy.odr

Azure 表存储 - 数据湖文件 - 通过 USQL 获取单行 Select 语句时响应时间缓慢

azure-data-lake - 在 USQL 中编写自定义提取器以跳过有编码问题的行

Azure/U-SQL - 对数字进行舍入

subquery - SQL中如何使用子查询?

azure - U-SQL 作业不访问 Azure SQL 数据库