Основные вопросы по U-SQL + Python

Я только начинаю изучать, как интегрировать 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?


person A.M.    schedule 09.06.2017    source источник


Ответы (1)


В: Как usqlml_main получает фрейм данных? Создает ли D (дата, время, автор, твит) кадр данных pandas?

Когда набор строк @t используется Extension.Python.Reducer, строки будут помещены в кадр данных pandas.

В: Что такое внутри usqlml_main функция «применить» в df.tweet.apply(get_mentions)?

Это метод Pandas apply(), который определен в DataFrames: https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.apply.html

В: Что в этом случае делает REDUCE? Всегда ли это необходимо при интеграции U-SQL с Python?

УМЕНЬШИТЬ нужно. В этом контексте его название «REDUCE» вводит в заблуждение. Назначение REDUCE в контексте U-SQL/Python заключается в том, что REDUCE используется для распределения большого набора строк на более мелкие разделы на основе значения ключа, полученного из определенного столбца. В приведенном выше примере он пытается разбить столбец даты. REDUCE не означает, что код фактически должен возвращать «уменьшенный» набор строк. На самом деле сокращение может вернуть еще больше строк. Опять же, это больше о разделении данных.

person saveenr    schedule 10.06.2017
comment
Я использую U-SQL + Python для обработки текста. Я установил параллелизм на 25, но в точке, где выполняется код Python, параллельно выполняется только одна вершина. Есть ли способ улучшить его? Где я могу найти подробности о том, как добиться параллелизма? - person Faizan khan; 03.07.2018