道歉,如果這個問題措辭不當:我正在着手一個大型機器學習項目,我不喜歡用Java編程。我喜歡用Python編寫程序。我聽說過關於豬的好事。我想知道如果有人能夠向我闡明在數學相關的工作中Pig與Python結合的可用性。另外,如果我要寫「流式Python代碼」,Jython是否會出現?它是否更有效率?使用豬和Python
感謝
P.S:我有以下幾個原因將不喜歡使用Mahout中的代碼是。我可能想要使用他們的一些數據結構:知道這是否可行,這將是有用的。
道歉,如果這個問題措辭不當:我正在着手一個大型機器學習項目,我不喜歡用Java編程。我喜歡用Python編寫程序。我聽說過關於豬的好事。我想知道如果有人能夠向我闡明在數學相關的工作中Pig與Python結合的可用性。另外,如果我要寫「流式Python代碼」,Jython是否會出現?它是否更有效率?使用豬和Python
感謝
P.S:我有以下幾個原因將不喜歡使用Mahout中的代碼是。我可能想要使用他們的一些數據結構:知道這是否可行,這將是有用的。
當您使用streaming in pig時,使用什麼語言並不重要......它所做的只是在shell中執行命令(如通過bash)。您可以使用Python,就像您可以使用grep
或C程序一樣。
您現在可以定義Pig UDFs in Python natively。這些UDF在執行時將通過Jython調用。
Programming Pig本書討論了使用UDF。這本書是一般不可或缺的。在最近的一個項目中,我們使用了Python UDF,偶爾也遇到了Floats vs. Doubles不匹配的問題,所以需要警告。我的印象是,對Python UDF的支持可能不如對Java UDF的支持那麼紮實,但總的來說,它工作得很好。
我簡要閱讀了關於UDF的書中的一節:我對某些東西並不十分清楚:如果可以執行Python/<插入最喜歡的語言流>並嵌入所需的任何庫作爲代碼的一部分,爲什麼會使用UDF?道歉,如果這個問題有一個非常明顯的問題,但我還沒有真正考慮過流媒體。 – dvk
在Hadoop中使用Python的另一種選擇是PyCascading。您可以不用Python/Jython編寫UDF,也不需要使用流式處理,而是可以將整個工作放在Python中,在定義數據處理管道的同一腳本中使用Python函數作爲「UDF」。 Jython被用作Python解釋器,流操作的MapReduce框架是Cascading。這些聯結,分組等在精神上與豬的工作方式類似,所以如果你已經認識豬,那就不會有什麼驚喜了。
一個單詞統計例子是這樣的:
@map(produces=['word'])
def split_words(tuple):
# This is called for each line of text
for word in tuple.get(1).split():
yield [word]
def main():
flow = Flow()
input = flow.source(Hfs(TextLine(), 'input.txt'))
output = flow.tsv_sink('output')
# This is the processing pipeline
input | split_words | GroupBy('word') | Count() | output
flow.run()
是否有這兩種方法中的任何利弊? (除了Jython和cPython之間的明顯區別,我不得不忍受...) – dvk
我不認爲你會注意到使用任何顯着的放緩。 –
除了速度之外,這兩種方法之間是否會有設計限制? – dvk