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.mzph.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…