取消
顯示的結果
而不是尋找
你的意思是:

錯誤——在repl磚需要額外的逃脫的字符串regexp_replace(比火花)

《暮光之城》
新的貢獻者三世

在火花(但不是磚),這些工作:

abc regexp_replace(' 1234567890 ', ' ^(? <一> \ \ w) (? < 2 > \ \ w)(? <三> \ \ w) ', ' $ 3 $ 2 $ 1 ') regexp_replace (“1234567890 abc”,“^(? <一> \ \ w) (? < 2 > \ \ w)(? <三> \ \ w) ', ' $ {3} $ {2} $ {1}”)

在磚,你必須使用這些相反:

abc regexp_replace(' 1234567890 ', ' ^(? <一> \ \ w) (? < 2 > \ \ w)(? <三> \ \ w) ', ' \ \ $ 2 \ 3美元$ 1 ')regexp_replace (“1234567890 abc”,“^(? <一> \ \ w) (? < 2 > \ \ w)(? <三> \ \ w) ', ' \ \{3} \ \美元美元{2}\ \{一}’)

以上所有regex導致3214567890美國廣播公司(abc)

1接受解決方案

接受的解決方案

《暮光之城》
新的貢獻者三世

進一步查詢和閱讀,我認為這一個錯誤。光子指定:

“光子是一個ANSI-compliant引擎設計兼容現代Apache火花api和與現有代碼——SQL, Python, R, Scala和Java——不需要重寫。”

至少在的SQL regexp_replace,情況並非如此。

@Suteja卡努裏人響應或進一步的想法嗎?

在原帖子查看解決方案

4回複4

匿名
不適用

@Stephen Wilcoxon:不,它不是一個錯誤。磚使用不同的正則表達式語法的味道比Apache火花。特別是,磚使用Java的正則表達式語法,而Apache火花使用Scala的正則表達式語法。Java和Scala的正則表達式語法有一些差異,這可能需要不同的某些字符轉義。

例如,在Java正則表達式中,反斜杠字符本身需要與另一個反斜杠轉義。所以,如果你想一個字符串替換為一個反斜杠後麵跟著字母“n”,您需要使用四個反斜杠在替換字符串中:“\ \ n”。正則表達式在Scala中,你隻需要兩個反斜杠“\ n”。

因此,如果你將正則表達式從火花移植到磚,你可能需要調整正則表達式和/或替換字符串匹配數據磚的語法。

希望這個有幫助。

《暮光之城》
新的貢獻者三世

這是一個非常反直觀的變化。鑒於磚至少出現基於火花和Scala(火花和Scala版本與沒有提到在集群配置中指定Java / JVM版本),為什麼磚選擇改變的火花regex的行為?如果改變正則表達式的行為,為什麼選擇Java——為什麼不是高級Perl(甚至PCRE)嗎?

SQL,這將是1000 x更有用,如果磚匹配的火花。有沒有機會,這個決定將會重新審視?

在一個絕對最小值,可以在文檔?這是非常普遍給出你的答案,我隻是試著用google搜索和完全沒有什麼出現的差異在SQL正則表達式(或SQL語法)磚和火花。

《暮光之城》
新的貢獻者三世

進一步查詢和閱讀,我認為這一個錯誤。光子指定:

“光子是一個ANSI-compliant引擎設計兼容現代Apache火花api和與現有代碼——SQL, Python, R, Scala和Java——不需要重寫。”

至少在的SQL regexp_replace,情況並非如此。

@Suteja卡努裏人響應或進一步的想法嗎?

@Stephen Wilcoxon:我應當提出這是一個錯誤。同時,因為你已經找到了一種方法來處理這種差異,什麼我們我可以幫你的嗎?

歡迎來到磚社區:讓學習、網絡和一起慶祝

加入我們的快速增長的數據專業人員和專家的80 k +社區成員,準備發現,幫助和合作而做出有意義的聯係。

點擊在這裏注冊今天,加入!

參與令人興奮的技術討論,加入一個組與你的同事和滿足我們的成員。

Baidu
map