Tensorflow Python API 翻譯(sparse_ops)

作者:chen_h
微信號 & QQ:862251340
微信公眾號:coderpai
我的博客:請點擊這里

計劃現將 tensorflow 中的 Python API 做一個學習,這樣方便以后的學習。
原文鏈接

該章介紹有關稀疏張量的API

稀疏張量表示

對于多維稀疏數據,TensorFlow提供了稀疏張量表示。稀疏張量里面的值都是采用IndexedSlices索引來表示,這樣能更加高效的表示數據。

class tf.SparseTensor

解釋:這個函數的作用是表示一個稀疏張量。

Tensorflow使用三個密集張量:indicesvaluesdense_shape,來表示一個稀疏張量。在Python接口中,這三個張量被整合到一個SparseTensor類中,如果你調換了這三個密集張量的位置,那么在進行操作之前,SparseTensor類會自動調換三個張量的位置。

具體的說,稀疏張量表示為SparseTensor(values, indices, dense_shape):

  • indices: 一個二維的張量,數據類型是int64,數據維度是[N, ndims]
  • values: 一個一維的張量,數據類型是任意的,數據維度是[N]
  • dense_shape: 一個一維的張量,數據類型是int64,數據維度是[ndims]

其中,N表示稀疏張量中存在N個值,ndims表示SparseTensor的維度。

相應的密集張量滿足:

dense.shape = dense_shape
dense[tuple(indices[i])] = values[i]復制代碼

按照慣例,indices中的索引應該按照從小到大的順序排序。SparseTensor中三個密集張量的順序不是強制的,你可以亂序,SparseTensor會自動將它排序。

比如:

SparseTensor(values=[1, 2], indices=[[0, 0], [1, 2]], shape=[3, 4])復制代碼

那么密集張量就是:

[[1, 0, 0, 0][0, 0, 2, 0][0, 0, 0, 0]]復制代碼

tf.SparseTensor.__init__(indices, values, shape)

解釋:這個函數的作用是構建一個SparseTensor

輸入參數:

  • indices: 一個二維的張量,數據類型是int64,數據維度是[N, ndims]
  • values: 一個一維的張量,數據類型是任意的,數據維度是[N]
  • dense_shape: 一個一維的張量,數據類型是int64,數據維度是[ndims]

輸出參數:
* 一個稀疏張量SparseTensor

tf.SparseTensor.indices

解釋:這個函數的作用是取出密集矩陣中非零值得索引。

使用例子:

#!/usr/bin/env python
# -*- coding: utf-8 -*-import tensorflow as tf 
import numpy as npa = tf.SparseTensor(indices=[[4, 1], [1, 2]], values=[1, 2], shape=[3, 4])
b = a.indices
sess = tf.Session()
print sess.run(a)
print sess.run(b)
sess.close()復制代碼

輸出參數:
* 一個二維的張量,數據類型是int64,數據維度是[N, ndims]。其中,N表示在稀疏張量中非零值的個數,ndims表示稀疏張量的秩。

tf.SparseTensor.values

解釋:這個函數的作用是取出密集矩陣中非零值。

使用例子:

#!/usr/bin/env python
# -*- coding: utf-8 -*-import tensorflow as tf 
import numpy as npa = tf.SparseTensor(indices=[[4, 1], [1, 2]], values=[1, 2], shape=[3, 4])
b = a.values
sess = tf.Session()
print sess.run(a)
print sess.run(b)
sess.close()復制代碼

輸出參數:
* 一個一維的張量,數據類型是任意的。

tf.SparseTensor.dtype

解釋:這個函數的作用是返回張量中元素的類型。

使用例子:

#!/usr/bin/env python
# -*- coding: utf-8 -*-import tensorflow as tf 
import numpy as npa = tf.SparseTensor(indices=[[4, 1], [1, 2]], values=tf.constant([1, 2]), shape=[3, 4])
b = a.dtype
sess = tf.Session()
print b
sess.close()復制代碼

輸出參數:

  • 返回張量中元素的類型。

tf.SparseTensor.shape

解釋:這個函數的作用是返回稀疏張量的維度。

使用例子:

#!/usr/bin/env python
# -*- coding: utf-8 -*-import tensorflow as tf 
import numpy as npa = tf.SparseTensor(indices=[[4, 1], [1, 2]], values=tf.constant([1, 2]), shape=[3, 4])
b = a.shape
sess = tf.Session()
print sess.run(b)
sess.close()復制代碼

輸出參數:

  • 返回稀疏張量的維度。

tf.SparseTensor.graph

解釋:這個函數的作用是返回包含該稀疏張量的圖。

使用例子:

#!/usr/bin/env python
# -*- coding: utf-8 -*-import tensorflow as tf 
import numpy as npa = tf.SparseTensor(indices=[[4, 1], [1, 2]], values=tf.constant([1, 2]), shape=[3, 4])
b = a.graph
sess = tf.Session()
print b
sess.close()復制代碼

輸出參數:

  • 返回包含該稀疏張量的圖。

class tf.SparseTensorValue

解釋:這個函數的作用是查看設置稀疏張量的值。

使用例子:

#!/usr/bin/env python
# -*- coding: utf-8 -*-import tensorflow as tf 
import numpy as npa = tf.SparseTensorValue(indices=[[4, 1], [1, 2]], values=tf.constant([1, 2]), shape=[3, 4])
sess = tf.Session()
print a
print a[0]
print a[1]
print a[2]
sess.close()復制代碼

tf.SparseTensorValue.indices

解釋:這個函數的作用是返回稀疏張量中值的存在位置。

使用例子:

#!/usr/bin/env python
# -*- coding: utf-8 -*-import tensorflow as tf 
import numpy as npa = tf.SparseTensorValue(indices=[[4, 1], [1, 2]], values=tf.constant([1, 2]), shape=[3, 4])
sess = tf.Session()
print a.indices
sess.close()復制代碼

輸出參數:

  • 返回稀疏張量中值的存在位置。

tf.SparseTensorValue.shape

解釋:這個函數的作用是返回稀疏張量的維度。

使用例子:

#!/usr/bin/env python
# -*- coding: utf-8 -*-import tensorflow as tf 
import numpy as npa = tf.SparseTensorValue(values=tf.constant([1, 2]), indices=[[4, 1], [1, 2]], shape=[3, 4])
sess = tf.Session()
print a.shape
sess.close()復制代碼

輸出參數:

  • 返回稀疏張量的維度。

tf.SparseTensorValue.shape

解釋:這個函數的作用是返回稀疏張量中的元素。

使用例子:

#!/usr/bin/env python
# -*- coding: utf-8 -*-import tensorflow as tf 
import numpy as npa = tf.SparseTensorValue(values=tf.constant([1, 2]), indices=[[4, 1], [1, 2]], shape=[3, 4])
sess = tf.Session()
print sess.run(a.values)  # 這是一個張量,所以用sess.run()
sess.close()復制代碼

輸出參數:

  • 返回稀疏張量中的元素。
稀疏張量與密集張量的轉換

TensorFlow提供了稀疏張量與密集張量之間的轉換操作。

tf.sparse_to_dense(sparse_indices, output_shape, sparse_values, default_value, name=None)

解釋:這個函數的作用是將一個稀疏表示轉換成一個密集張量。具體將稀疏張量sparse轉換成密集張量dense如下:

# If sparse_indices is scalar
dense[i] = (i == sparse_indices ? sparse_values : default_value)# If sparse_indices is a vector, then for each i
dense[sparse_indices[i]] = sparse_values[i]# If sparse_indices is an n by d matrix, then for each i in [0, n)
dense[sparse_indices[i][0], ..., sparse_indices[i][d-1]] = sparse_values[i]復制代碼

默認情況下,dense中的填充值default_value都是0,除非該值被設置成一個標量。

使用例子:

#!/usr/bin/env python
# -*- coding: utf-8 -*-import tensorflow as tf 
import numpy as npa = tf.sparse_to_dense(sparse_indices = [[1,2],[2,1]], output_shape = [3,3], sparse_values = [2,3], default_value = 1)
sess = tf.Session()
print sess.run(a) 
sess.close()復制代碼

輸入參數:

  • sparse_indices: 一個Tensor,數據類型必須是int32或者int64。數據維度0維,一維或者二維都可以,或者更加高緯度的sparse_indices[i]
  • output_shape: 一個Tensor,數據類型必須和sparse_indices相同。數據維度是一維,表示輸出密集張量的維度。
  • sparse_values: 一個Tensor,數據維度是一維,其中的每一個元素對應sparse_indices中坐標的值。
  • default_value: 一個Tensor,數據類型必須和sparse_values相同,數據維度是一個標量。設置稀疏索引不指定的值。
  • name: (可選)為這個操作取一個名字。

輸出參數:

  • 一個Tensor,數據類型和sparse_values相同。密集張量的數據維度是output_shape

tf.sparse_tensor_to_dense(sp_input, default_value, name=None)

解釋:這個函數的作用是將一個稀疏張量SparseTensor轉換成一個密集張量。

這個操作是一個便利的將稀疏張量轉換成密集張量的方法。

比如,sp_input的數據維度是[3, 5],非空值為:

[0, 1]: a
[0, 3]: b
[2, 0]: c復制代碼

default_value值為x,那么輸出的密集張量的維度是[3, 5],具體的展示形式如下:

[[x a x b x][x x x x x][c x x x x]]復制代碼

使用例子:

#!/usr/bin/env python
# -*- coding: utf-8 -*-import tensorflow as tf 
import numpy as npa = tf.SparseTensor(indices = [[0, 1], [0, 3], [2, 0]], values=[1,2,3], shape=[3, 5])
b = tf.sparse_tensor_to_dense(a, default_value = 11)
sess = tf.Session()
print sess.run(b)
sess.close()復制代碼

輸入參數:

  • sp_input: 一個SparseTensor
  • default_value: 數據維度是一個標量,設置稀疏索引不指定的值。
  • name: (可選)設置返回張量名稱的前綴。

輸出參數:

  • 一個密集張量,數據維度是sp_input.shape,密集張量里面的值為sp_input中指定的值,沒有索引的值為default_value值。

異常:

  • 類型錯誤: 如果sp_input不是一個SparseTensor,將報錯。

tf.sparse_to_indicator(sp_input, vocab_size, name=None)

解釋:這個函數的作用是將稀疏張量SparseTensor的坐標轉換成密集張量中的布爾坐標。

sp_input中的最后一維被丟棄,并且用sp_input在該位的值來代替,如果sp_input.shape = [D0, D1, D2, ..., Dn, K],其中K是最后一維,那么output.shape = [D0, D1, D2, ..., Dn, vocab_size],其中:

output[d_0, d_1, ..., d_n, sp_input[d_0, d_1, ..., d_n, k]] = True復制代碼

output中其余值為False

比如,sp_input.shape = [2, 3, 4],非空值如下:

[0, 0, 0]: 0
[0, 1, 0]: 10
[1, 0, 3]: 103
[1, 1, 2]: 112
[1, 1, 3]: 113
[1, 2, 1]: 121復制代碼

并且vocab_size = 200,那么輸出output.shape = [2, 3, 200],并且output中的值都是False,除了以下位置:

(0, 0, 0), (0, 1, 10), (1, 0, 103), (1, 1, 112), (1, 1, 113), (1, 2, 121).復制代碼

使用例子:

#!/usr/bin/env python
# -*- coding: utf-8 -*-import tensorflow as tf 
import numpy as npa = tf.SparseTensor(indices = [[0, 1], [0, 3], [2, 0]], values=[1,2,3], shape=[3, 5])
b = tf.sparse_to_indicator(a, 10)
sess = tf.Session()
print sess.run(b)
sess.close()復制代碼

輸入參數:

  • sp_input: 一個SparseTensor,數據類型是int32或者int64
  • vocab_size: sp_Input最后一維的新的維度,并且0 <= sp_input.shape > vocab_size
  • name: (可選)設置返回張量名稱的前綴。

輸出參數:

  • 一個經過修改的密集布爾張量。

異常:

  • 類型錯誤: 如果sp_input不是一個SparseTensor,將報錯。
稀疏張量的操作

TensorFlow提供了一些對于稀疏張量的操作函數。

tf.sparse_concat(concat_dim, sp_inputs, name=None)

解釋:這個函數的作用是將一系列的SparseTensor,按照指定的維度進行合并。

具體合并思路是,先將稀疏張量看成是一個密集張量,然后按照指定的維度進行張量合并,最后將合并成的密集張量看成是一個稀疏張量。

輸入的數據中,SparseTensor的數據維度必須是相同的,并且indicesvaluesshapes的長度必須相同。

輸出數據的維度將由輸入數據的維度決定,除了需要合并的那一維度,這一維度是所有數據該維度的相加總和。

輸出張量中的元素將會被重新保存在稀疏張量中,并且按照原來的順序進行排序。

這個操作的時間復雜度是O(M log M),其中,M是輸入數據中所有非空元素的個數總和。

比如,當concat_dim = 1時:

sp_inputs[0]: shape = [2, 3]
[0, 2]: "a"
[1, 0]: "b"
[1, 1]: "c"sp_inputs[1]: shape = [2, 4]
[0, 1]: "d"
[0, 2]: "e"復制代碼

那么輸出數據為:

shape = [2, 7]
[0, 2]: "a"
[0, 4]: "d"
[0, 5]: "e"
[1, 0]: "b"
[1, 1]: "c"復制代碼

用圖形表示,如下:

[    a] concat [  d e  ] = [    a   d e  ]
[b c  ]           [         ]     [b c          ]復制代碼

使用例子:

#!/usr/bin/env python
# -*- coding: utf-8 -*-import tensorflow as tf 
import numpy as npa = tf.SparseTensor(indices = [[0, 1], [0, 3], [2, 0]], values=[1,2,3], shape=[3, 5])
aa = tf.SparseTensor(indices = [[1, 1], [1, 3], [2, 1]], values=[11,12,13], shape=[3, 5])
b = tf.sparse_concat(0, [a, aa])
sess = tf.Session()
print sess.run(b)
print sess.run(tf.sparse_tensor_to_dense(b))
sess.close()復制代碼

輸入參數:

  • concat_dim: 需要合并的維度。
  • sp_inputs: 一個需要合并的SparseTensor列表。
  • name: (可選)設置返回張量名稱的前綴。

輸出參數:

  • 一個經過合并的SparseTensor

異常:

  • 類型錯誤: 如果sp_inputs不是一個SparseTensor列表。

tf.sparse_reorder(sp_input, name=None)

解釋:這個函數的作用是將SparseTensor中的元素進行重新排列,按照索引從小到大進行排序。

重排列不會影響SparseTensor的維度。

比如,如果sp_input的維度是[4, 5]indices / values如下:

[0, 3]: b
[0, 1]: a
[3, 1]: d
[2, 0]: c復制代碼

那么輸出的SparseTensor的維度還是[4, 5]indices / values如下:

[0, 1]: a
[0, 3]: b
[2, 0]: c
[3, 1]: d復制代碼

使用例子:

#!/usr/bin/env python
# -*- coding: utf-8 -*-import tensorflow as tf 
import numpy as npa = tf.SparseTensor(indices = [[2, 1], [0, 3], [2, 0]], values=[1,2,3], shape=[3, 5])
b = tf.sparse_reorder(a)
sess = tf.Session()
print sess.run(b)
sess.close()復制代碼

輸入參數:

  • sp_input: 一個SparseTensor
  • name: (可選)設置返回張量名稱的前綴。

輸出參數:

  • 一個SparseTensor,數據維度和數據類型都不變,只有其中的值進行了有序的排序。

異常:

  • 類型錯誤: 如果sp_input不是一個SparseTensor

tf.sparse_retain(sp_input, to_retain, name=None)

解釋:這個函數的作用是保留SparseTensor中指定的非空元素。

比如,如果sp_input的數據維度是[4, 5],并且擁有4個非空值如下:

[0, 1]: a
[0, 3]: b
[2, 0]: c
[3, 1]: d復制代碼

而且to_retain = [True, False, False, True],那么最后輸出數據SparseTensor的數據維度是[4, 5],并且保留兩個非空值如下:

[0, 1]: a
[3, 1]: d復制代碼

使用例子:

#!/usr/bin/env python
# -*- coding: utf-8 -*-import tensorflow as tf 
import numpy as npa = tf.SparseTensor(indices = [[2, 1], [0, 3], [2, 0]], values=[1,2,3], shape=[3, 5])
b = tf.sparse_retain(a, [False, False, True])
sess = tf.Session()
print sess.run(b)
sess.close()復制代碼

輸入參數:

  • sp_input: 一個SparseTensor,包含N個非空元素。
  • to_retain: 一個布爾類型的向量,向量長度是N,并且其中包含MTrue值。

輸出參數:

  • 一個SparseTensor,數據維度和輸入數據相同,其中包含M個非空值,該值的位置根據True的位置來決定。

異常:

  • 類型錯誤: 如果sp_input不是一個SparseTensor

tf.sparse_fill_empty_rows(sp_input, default_value, name=None)

解釋:這個函數的作用是將二維的SparseTensor中,將空的行中填充指定元素的值。

如果一行中不存在元素,那么就將改行的坐標[row, 0]填上default_value

比如,我們假設sp_input的數據維度是[5, 6],并且非空值如下:

[0, 1]: a
[0, 3]: b
[2, 0]: c
[3, 1]: d復制代碼

因為在稀疏張量中,第一行和第四行中不存在值,那么我們需要在[1, 0][4, 0]坐標填上default_value,如下:

[0, 1]: a
[0, 3]: b
[1, 0]: default_value
[2, 0]: c
[3, 1]: d
[4, 0]: default_value復制代碼

請注意,輸入可能有空列在最后,但對這個操作沒有任何影響。

輸出的SparseTensor將是一個按照從小到大的順序進行排序,并且輸出數據和輸入數據擁有相同的數據維度。

這個操作還會返回一個布爾向量,其中的布爾值,如果是True值,那么表示該行添加了一個default_value,計算公式如下:

empty_row_indicator[i] = True iff row i was an empty row.復制代碼

使用例子:

#!/usr/bin/env python
# -*- coding: utf-8 -*-import tensorflow as tf 
import numpy as npa = tf.SparseTensor(indices = [[2, 1], [0, 3], [2, 0]], values=[1,2,3], shape=[6, 5])
b, bb = tf.sparse_fill_empty_rows(a, 10)
sess = tf.Session()
print sess.run(b)
print '----'
print sess.run(bb)
sess.close()復制代碼

輸入參數:

  • sp_input: 一個SparseTensor,數據維度是[N, M]
  • default_value: 需要向空行填充的值,數據類型和sp_input相同。
  • name: (可選)設置返回張量名稱的前綴。

輸出參數:

  • sp_ordered_output: 一個SparseTensor,數據維度是[N, M],并且其中所有空行填充了default_value
  • empty_row_indicator: 一個布爾類型的向量,數據長度是N,如果該行填充了default_value,那么該位置的布爾值為True

異常:

  • 類型錯誤: 如果sp_input不是一個SparseTensor


CoderPai 是一個專注于算法實戰的平臺,從基礎的算法到人工智能算法都有設計。如果你對算法實戰感興趣,請快快關注我們吧。加入AI實戰微信群,AI實戰QQ群,ACM算法微信群,ACM算法QQ群。詳情請關注 “CoderPai” 微信號(coderpai) 。


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/539664.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/539664.shtml
英文地址,請注明出處:http://en.pswp.cn/news/539664.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

高性能mysql 小查詢_高性能MySql進化論(十一):常見查詢語句的優化

總結一下常見查詢語句的優化方式1 COUNT1. COUNT的作用 COUNT(table.filed)統計的該字段非空值的記錄行數 COUNT(*)或者是COUNT(not nullable field) 統計的是全表的行數如果要是統計全表記錄數&#xff0c;COUNT(*)效率會比COUNT(not nullable fie…

ORA-01861: 文字與格式字符串不匹配

select to_date(20160401000000,yyyy-mm-dd) from dual; ---------- 報錯&#xff1a;ORA-01861: 文字與格式字符串不匹配 原因&#xff1a;字符串20160401000000與要轉換的格式 yyyy-mm-dd 格式不對。 20160401000000 是 yyyymmddhh24miss 格式的 -------- select to_da…

首席架構師徐海峰眼中的架構和出色的架構師

CSDN架構領域編輯采訪了一些與會講師&#xff0c;談談他們將在會上分享的內容、相關技術和程序人生&#xff0c;帶你領略講師風采。 本期我們采訪的講師是來自閱文集團首席架構師徐海峰&#xff0c;主要負責內容中心的網站架構和分布式存儲、分布式計算工作。10年互聯網開發經驗…

java socket建立長連接_Java Web項目中使用Socket通信多線程、長連接的方法

很多時候在javaweb項目中我們需要用到Socket通信來實現功能&#xff0c;在web中使用Socket我們需要建立一個監聽程序&#xff0c;在程序啟動時&#xff0c;啟動socket監聽。我們的應用場景是在java項目中&#xff0c;需要外接如一個硬件設備&#xff0c;通過tcp通信&#xff0c…

hadoop-eclipse-plugin使用

下載hadoop安裝包&#xff1a;http://www.carfab.com/apachesoftware/hadoop/common/hadoop-1.0.2/ 但是沒有plugin&#xff0c;我到這個地方下載的&#xff1a;http://ishare.iask.sina.com.cn/f/23642243.html?fromlikecopy到你的eclipse_home的plugins下面。配置map/reduce…

hadoop eclipse plugin windows下載集合

收集了hadoop穩定版本的eclipse plugin for windows。資源分一律為0分 hadoop-eclipse-plugin-1.2.1.jar http://download.csdn.net/detail/zengmingen/9488180 hadoop-eclipse-plugin-2.2.0.jar http://download.csdn.net/detail/zengmingen/9488182 hadoop-eclipse-pl…

java 記事本界面_JAVA/GUI程序之記事本

自上半年JAVA課程結束后&#xff0c;再也沒有看過JAVA了&#xff0c;最近不是很忙&#xff0c;又簡單的看了看&#xff0c;本博客純屬記錄學習過程&#xff0c;請大神們別笑&#xff0c;其中錯誤是難免的&#xff0c;畢竟是新手寫的博客。下面就進入我們的正題吧&#xff0c;復…

104. Maximum Depth of Binary Tree

104. Maximum Depth of Binary Tree 題目 Given a binary tree, find its maximum depth.The maximum depth is the number of nodes along the longest path from the root node down to the farthest leaf node. 解析 // Maximum Depth of Binary Tree class Solution { publ…

mapper-reducer word count 實例

統計一個文件里各單詞的個數&#xff0c;假設這個文件很大。 原理如下圖&#xff1a; 編寫代碼&#xff1a; WCMapper.java package zengmg.hadoop.mr.wordcount;import java.io.IOException;import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.Text; …

java 遠程調用url_使用Java的URL/HttpURLConnection進行遠程調用(POST請求)

利用Java的HttpURLConnection進行遠程url請求(調用遠程接口)測試類&#xff1a;請求類型為json,以post方式請求&#xff0c;利用OutputStream寫入數據實體類&#xff1a;public class User implementsSerializable {privateString name;privateString password;publicString ge…

LindDotNetCore~職責鏈模式的應用

回到目錄 職責鏈模式 它是一種設計模塊&#xff0c;主要將操作流程與具體操作解耦&#xff0c;讓每個操作都可以設置自己的操作流程&#xff0c;這對于工作流應用是一個不錯的選擇&#xff01; 下面是官方標準的定義&#xff1a;責任鏈模式是一種設計模式。在責任鏈模式里&…

MR程序的幾種提交運行模式

MR程序的幾種提交運行模式 本地模型運行 1/在windows的eclipse里面直接運行main方法&#xff0c;就會將job提交給本地執行器localjobrunner執行 ----配置path&#xff1a;D:\hadoop-2.7.2\bin ----配置hadoop_home&#xff1a;D:\hadoop-2.7.2 ----復制 hadoop.dll和winutil…

構件之法讀書筆記04

我們前兩周我們團隊一起制作了一個大學生記賬軟件&#xff0c;但是我們沒有對我們的軟件進行測試&#xff0c;只要是這個功能能夠順利進行&#xff0c;我們就覺得OK。 其實&#xff0c;我認為我們的軟件是有問題的&#xff0c;對于一些極限的操作能否完成&#xff0c;在各種環境…

零點起飛學java視頻_零點起飛學java (劉升華) 高清PDF_IT教程網

資源名稱&#xff1a;零點起飛學java (劉升華) 高清PDF第1篇 java開發基礎第1章 java概述( 教學視頻&#xff1a;37分鐘) 2第2章 基本數據類型及運算( 教學視頻&#xff1a;52分鐘) 14第3章 java程序流程控制( 教學視頻&#xff1a;33分鐘) 36第4章 類與對…

【Spark】開發Spark選擇Java還是Scala?

Spark-Java-Scala-哪種語言 spark java 支持_百度搜索(1 封私信)Spark 中用 Scala 和 java 開發有什么區別&#xff1f; - 知乎(1 封私信)Spark平臺下&#xff0c;scala比java更有優勢么&#xff1f; - 知乎

vector 修改 java_java對vector動態數組中的對象排序,以下代碼有何問題,如何修改?...

展開全部package com.tx.collection;import java.util.Comparator;import java.util.Iterator;import java.util.Map;import java.util.Set;import java.util.TreeMap;import java.util.TreeSet;import java.util.Vector;public class Student {String name;int score;public S…

hadoop的序列化與java的序列化區別

java的序列化機制 java序列化時會把具體類的數據和類的繼承結構信息都序列化傳遞。如下圖hadoop的序列化機制 序列化類的數據&#xff0c;但是不序列化類的繼承結構信息。 網絡傳遞的時候就少了很多流量&#xff0c;hadoop也不需要類的繼承關系&#xff0c;只要類的數據就夠…

java mail 已發送_JavaMail獲取已發送郵件

public static voidmain(String args[]) {Properties props new Properties(); //參數配置props.setProperty("mail.transport.protocol", "smtp"); //使用的協議(JavaMail規范要求)props.setProperty("mail.smtp.host", "smtp.exmail.qq.c…

ORA-08103: object no longer exists

今天工具箱報錯&#xff1a; ORA-08103: object no longer exists 查了原因&#xff0c;是有session在操作表&#xff0c;比如插入&#xff0c;更新等。而工具箱這個操作剛好在select表&#xff0c;所以報錯。-------下文是英文解釋----- ORA-08103: object no longer exists錯…

【Spark】Spark-空RDD判斷與處理

Spark-空RDD判斷與處理 SparkKafkaDemo - Streaming Statisticsrdd isempty count_百度搜索Spark RDD.isEmpty costs much time - Stack OverflowSpark Streaming中空RDD的處理-Spark-about云開發[SPARK-5270] Provide isEmpty() function in RDD API - ASF JIRA19 Spark Stre…