亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么讓 PigPen 支持本地代碼和命名空間

發布時間:2021-07-26 11:54:02 來源:億速云 閱讀:136 作者:chen 欄目:云計算

這篇文章主要講解了“怎么讓 PigPen 支持本地代碼和命名空間”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“怎么讓 PigPen 支持本地代碼和命名空間”吧!

在介紹 PigPen 的文章中,作者在 Future Work 一節中提到,我們在 PigPen 中不能調用本地聲明的代碼。例如一下代碼在最后生成的 Pig 腳本中是執行不了的,會報找不到符號 foo 的錯誤:

(ns test.core
  (:require [pigpen.core :as pig]))
(defn foo [x] …)
(pig/map foo)

這樣就只能把所有 foo 函數要做的事情全部寫在 pig/map 后面。如果 foo 要做的事情很多,代碼很長,那么寫出來的代碼將非常難看。

PigPen 不光不支持本地代碼的調用,還不支持 namespace 的引用(https://groups.google.com/forum/#!msg/pigpen-support/-Kd06UfzxEU/vYEAZvmZLFcJ)。

這些在任何編程語言中都看似很自然的功能在初期的 PigPen 中都不支持。其實這里的每一個本地代碼的調用或者其他 namespace 中函數的調用在最后寫成 Pig 腳本后都是一個 UDF,而 PigPen 的目的之一也就是要取代 Pig 腳本和 UDF混寫的方式,所以應該會有解決的辦法,但沒時間(也懶)去扒源代碼去想辦法處理這種情況,于是到 GitHub 上找到主要的貢獻者 Matt Bossenbroek,向他發郵件請教。

Matt 指出如果要用調用本地代碼需要這樣做:

(ns test.core
  (:require [pigpen.core :as pig]))
(defn foo [x] …)
(pig/map (do (require 'test.core) foo))

我嘗試了一下,好像并不能達到預期的效果。

于是我試著改變一下生成的 Pig 腳本,看能不能運行起來。反正最后部署到集群上運行的時候也是用的生成的 Pig 腳本文件。在生成的 Pig 腳本中,所有的 Clojure 代碼都被 pigpen.PigPenFn* 一組類(PigPenFnBooleanPigPenFnStringPigPenFnTuplePigPenFnDataBagPigPenFnDataByteArray)包裝成 UDF 插入到最終生成的 Pig 腳本中,不同的后綴返回不同的 Pig 基本類型的值。

在生成的 Pig 腳本中,這些類的第一個參數都是 '(clojure.core/require (quote [pigpen.pig]))',看一下代碼知道這個參數會被當做 Clojure 代碼讀入來做初始化用,所以應該在這里加上要包含的 namespace。試了一些果然可以運行了。再看一下代碼發現要通過 PigPen 的方法來添加這個 require 也不好弄,就打算先用 PigPen 生成 Pig 腳本,然后在這里加上另外要包含的 namespace(寫一個腳本往每個這樣的類里面加上 namespace 也不會太麻煩)。

同時也順帶問一下 Matt 怎么利用 PigPen 來做,Matt 說正在考慮用什么樣的方式來支持引用 namespace。結果在大年初二早上收到郵件說新版本的 PigPen([com.netflix.pigpen/pigpen "0.1.4"]) 可以支持了,并給出了一個例子:

(ns pigpen-demo.core
  (:require [pigpen.core :as pig]
            [clojure.string :as str]))

(defn square [x]
  (* x x))

(defn my-query []
  (->>
    (pig/return [1 2 3])
    (pig/map square)
    (pig/map (fn [x] (square x)))
    (pig/into [])
    (pig/map #(str/join "," %))
    (pig/dump)))

但是一定要把整個項目打包成一個 uberjar 分發到集群上去。這樣基本上可以把 PigPen 用到我的實驗性的工作中去了(production 環境不允許亂用新東西)。

感謝各位的閱讀,以上就是“怎么讓 PigPen 支持本地代碼和命名空間”的內容了,經過本文的學習后,相信大家對怎么讓 PigPen 支持本地代碼和命名空間這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

呼和浩特市| 哈巴河县| 定日县| 蚌埠市| 江津市| 宁德市| 资中县| 富源县| 亳州市| 霍林郭勒市| 西华县| 枝江市| 古交市| 云阳县| 大名县| 怀远县| 武定县| 七台河市| 南召县| 丰宁| 缙云县| 桓台县| 泉州市| 菏泽市| 茶陵县| 堆龙德庆县| 邢台市| 阿拉善左旗| 荆州市| 牡丹江市| 阿克陶县| 增城市| 抚松县| 建德市| 无极县| 屯门区| 鄱阳县| 定边县| 沅江市| 三原县| 新郑市|