成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

學習這門語言兩個月了,還是卡在了加減乘除這里...

開發 后端
scala 對于類型的嚴格要求已經其從函數式編程那里借鑒來的思想,讓代碼寫得太爽了。大部分問題,編譯期就能發現,而且配合上 IDEA 的自動補全,真的很舒服。

[[424065]]

因為業務需要(項目技術棧為 spark 2+ ),七八月份興沖沖從學校圖書館借了書,學了 scala + spark ,還寫了不少博文,其中有幾篇被拿來發推送:Scala,一門「特立獨行」的語言!、【疑惑】如何從 Spark 的 DataFrame 中取出具體某一行? ...

但實際操作起來,還是遇到不少問題。

收獲經驗有二:

  • 看書(尤其國內教材)理解理解概念還行,但是對于實際操作沒啥大用
  • 接觸一門新的編程語言,首先應該閱讀大量優秀的案例代碼,還有理解清楚數據類型

舉個例子,我昨天上午一直被這個糾纏著:請你給 spark 中 dataframe 的某一列數 取為

按理說不難吧。要是 python 的 pandas 就直接上了:

  1. # pandas 
  2. df['sig_x'] = df['x'].apply(lambda x: 1 / (1 - np.exp(-x))) 

但是 spark 不行。

spark 中,新建一列使用的函數是 withColumn ,首先傳入函數名,接下來傳入一個 col 對象。

這個 col 對象就有講究了,雖然我今天看來還是比較直觀好理解的,但是昨天可就在里面周旋了好一陣子。

首先,如果我想使用列 x ,我不可以直接 "x" ,因為這是一個字符串,我需要調用隱式轉換的函數 $ ,而這個 $ 實際上在 spark.implicits._ 中。

值得注意的是, spark 是你的 SparkSession 實例。

上述內容不清楚,則需要花一陣子找資料。

  1. import spark.implicits._ 
  2. val df_new = df.withColumn("x_new", $"x"

上述代碼構造了一個新 df_new 對象,其中有 x_new 列與 x 列,兩列數值完全一致。

其次,我的運算函數在哪里找呢?

答案是 org.apache.spark.sql.functions ,因為是 col 對象,其可能沒有重載與常數數據類型的 + - * / 運算符,因此,如果我們 1 - $"x" 可能會報錯:因為 #"x" 是 col ,而 1 只是一個 Int 。

我們要做的就是把 1 變成一個 col :苦苦查閱資料后,我找到了 lit 方法,也是在 org.apache.spark.sql.functions 中。最終的方案如下。

  1. import spark.implicits._ 
  2. import org.apache.spark.sql.functions.{fit, exp, negate} 
  3. val df_result = df_raw_result 
  4.   .withColumn("x_sig"
  5.     lit(1.0) / (lit(1.0) + exp(negate($"x"))) 
  6.   ) 

其實,實際的代碼比上面的還要復雜,因為 "x" 列里面其實是一個 vector 對象,我直接 $"x"(0) 無法取出 $"x" 列中的向量的第一個元素,最后查到用 udf 可以實現列的函數。

  1. import spark.implicits._ 
  2. import org.apache.spark.sql.functions.{fit, exp, negate, udf} 
  3.  
  4. // 取向量中的第一個元素 
  5. val getItem = udf((v: org.apache.spark.ml.linalg.DenseVector, i: Int) => v(i)) 
  6.  
  7. val df_result = df_raw_result 
  8.   .withColumn("x_sig"
  9.     lit(1.0) / (lit(1.0) + exp(negate(getItem($"x", lit(0))))) 
  10.   ) 

python 和 scala ?

看起來,似乎 python 下的操作更加簡潔優雅,但我更喜歡用 scala 書寫這種級別的項目。

原因很簡單, scala 對于類型的嚴格要求已經其從函數式編程那里借鑒來的思想,讓代碼寫得太爽了。大部分問題,編譯期就能發現,而且配合上 IDEA 的自動補全,真的很舒服。

目前為止,還沒有弄懂 udf 代表著什么,基礎語法與框架思想這里還是有待查缺補漏。

 

責任編輯:姜華 來源: Piper蛋窩
相關推薦

2013-11-27 09:26:02

遠程公司

2021-04-19 17:32:34

Java內存模型

2021-04-02 06:17:10

大數加減乘除數據結構算法

2021-10-29 22:49:57

JavaScript開發精度

2012-09-03 14:38:57

2018-04-18 09:07:24

iPhone X手機利潤

2019-06-12 09:29:44

華為禁令開發

2025-02-08 08:30:00

2018-08-09 09:00:34

Hadoop制造行業國內企業

2012-01-11 11:13:06

惠普ProLiant

2016-11-09 16:52:20

Android 7.0谷歌安卓

2022-03-21 14:37:17

數據存儲服務器IT

2021-11-30 10:06:40

Windows 11Windows微軟

2014-06-25 09:26:16

創業創業失敗

2019-11-28 15:28:33

iOS 13蘋果更新

2014-08-25 11:25:52

WindowsLinux

2009-02-19 14:33:32

2023-04-13 07:55:11

項目Ladybird瀏覽器

2022-07-11 09:37:58

程序員出國
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 激情欧美一区二区三区中文字幕 | 黄色一级片aaa | 91精品国产一区二区三区动漫 | 成人三级在线观看 | 91一区| 在线a视频 | 国产久视频 | 三级av免费 | www.国产| 日韩综合一区 | 蜜桃视频在线观看免费视频网站www | 亚洲男人网 | 成人av一区二区三区 | 日韩理论电影在线观看 | 亚洲视频免费观看 | 成人在线| 成人久草 | 国产精品一区二区不卡 | 特黄色一级毛片 | 成人午夜视频在线观看 | 久久精品一二三影院 | 日韩精品一区二区三区在线播放 | 欧美456| 一级毛片中国 | 日韩一及片| 91中文字幕在线 | 久久黄网| 91在线免费观看网站 | 欧美日韩国产不卡 | 精品美女| 国产精品国产亚洲精品看不卡15 | 国产精品乱码一二三区的特点 | 欧美视频成人 | 亚洲三级av| 日韩一区二区免费视频 | 久久久久久av | 99精品视频在线观看免费播放 | 欧美视频三级 | 一本色道久久综合亚洲精品高清 | xxx.在线观看| 免费在线观看毛片 |