一条 SQL 在 Apache Spark 之旅(下)

Size: px
Start display at page:

Download "一条 SQL 在 Apache Spark 之旅(下)"

Transcription

1 终于到最后一篇了, 我们在前面两篇文章中 一条 SQL 在 Apache Spark 之旅 ( 上 ) 和 一条 SQL 在 Apache Spark 之旅 ( 中 ) 介绍了 Spark SQL 之旅的 SQL 解析 逻辑计划绑定 逻辑计划优化以及物理计划生成阶段, 本文我们将继续接上文, 介绍 Spark SQL 的全阶段代码生成以及最后的执行过程 全阶段代码生成阶段 - WholeStageCodegen 前面我们已经介绍了从逻辑计划生成物理计划 (Physical Plan), 但是这个物理计划还是不能直接交给 Spark 执行的,Spark 最后仍然会用一些 Rule 对 SparkPlan 进行处理, 这个过程是 prepareforexecution 过程, 这些 Rule 如下 : protected def preparations: Seq[Rule[SparkPlan]] = Seq( PlanSubqueries(sparkSession), // 特殊子查询物理计划处理 EnsureRequirements(sparkSession.sessionState.conf), // 确保执行计划分区与排序正确性 CollapseCodegenStages(sparkSession.sessionState.conf), // 代码生成 ReuseExchange(sparkSession.sessionState.conf), // 节点重用 ReuseSubquery(sparkSession.sessionState.conf)) // 子查询重用 上面的 Rule 中 CollapseCodegenStages 是重头戏, 这就是大家熟知的全代码阶段生成,Catalyst 全阶段代码生成的入口就是这个规则 当然, 如果需要 Spark 进行全阶段代码生成, 需要将 spark.sql.codegen.wholestage 设置为 true( 默认 ) 为什么需要代码生成 在介绍代码生成之前, 我们先来了解一下 Spark SQL 为什么需要引入代码生成 在 Apache Spark 2.0 之前,Spark SQL 的底层实现是基于 Volcano Iterator Model( 参见 Volcano-An Extensible and Parallel Query Evaluation System ) 的, 这个是由 Goetz Graefe 在 1993 年提出的, 当今绝大多数数据库系统处理 SQL 在底层都是基于这个模型的 这个模型的执行可以概括为 : 首先数据库引擎会将 SQL 翻译成一系列的关系代数算子或表达式, 然后依赖这些关系代数算子逐条处理输入数据并产生结果 每个算子在底层都实现同样的接口, 比如都实现了 next() 方法, 然后最顶层的算子 next() 调用子算子的 next(), 子算子的 next() 在调用孙算子的 next(), 直到最底层的 next(), 具体过程如下图表示 : 1 / 10

2 如果想及时了解 Spark Hadoop 或者 HBase 相关的文章, 欢迎关注微信公众号 :iteblog_hadoop Volcano Iterator Model 的优点是抽象起来很简单, 很容易实现, 而且可以通过任意组合算子来表达复杂的查询 但是缺点也很明显, 存在大量的虚函数调用, 会引起 CPU 的中断, 最终影响了执行效率 数砖的官方博客对比过使用 Volcano Iterator Model 和手写代码的执行效率, 结果发现手写的代码执行效率要高出十倍! 基于上面的发现, 从 Apache Spark 2.0 开始, 社区开始引入了 Whole-stage Code Generation, 参见 SPARK-12795, 主要就是想通过这个来模拟手写代码, 从而提升 Spark SQL 的执行效率 Whole-stage Code Generation 来自于 2011 年 Thomas Neumann 发表的 Efficiently Compiling Efficient Query Plans for Modern Hardware 论文, 这个也是 Tungsten 计划的一部分 Tungsten 代码生成分为三部分 : 表达式代码生成 (expression codegen) 全阶段代码生成 (Whole-stage Code Generation) 加速序列化和反序列化 (speed up serialization/deserialization) 表达式代码生成 (expression codegen) 这个其实在 Spark 1.x 就有了 表达式代码生成的基类是 org.apache.spark.sql.catalyst.expressions.codegen.codegenerator, 其下有七个子类 : 如果想及时了解 Spark Hadoop 或者 HBase 相关的文章, 欢迎关注微信公众号 :iteblog_hadoop 我们前文的 SQL 生成的逻辑计划中的 isnotnull(id#8) && (id#8 > 5) 就是最基本的表达式 它也是一种 Predicate, 所以会调用 2 / 10

3 org.apache.spark.sql.catalyst.expressions.codegen.generatepredicate 来生成表达式的代码, 生成的代码如下 : 19/06/18 16:47:15 DEBUG GeneratePredicate: Generated predicate '(isnotnull(input[0, int, true ]) && (input[0, int, true] > 5))': /* 001 */ public SpecificPredicate generate(object[] references) { /* 002 */ return new SpecificPredicate(references); /* 003 */ } /* 004 */ /* 005 */ class SpecificPredicate extends org.apache.spark.sql.catalyst.expressions.codegen.pr edicate { /* 006 */ private final Object[] references; /* 007 */ /* 008 */ /* 009 */ public SpecificPredicate(Object[] references) { /* 010 */ this.references = references; /* 011 */ /* 012 */ } /* 013 */ /* 014 */ public void initialize(int partitionindex) { /* 015 */ /* 016 */ } /* 017 */ /* 018 */ public boolean eval(internalrow i) { /* 019 */ boolean isnull_2 = i.isnullat(0); // 判断 id 是否为空 /* 020 */ int value_2 = isnull_2? /* 021 */ -1 : (i.getint(0)); /* 022 */ boolean isnull_0 = false; /* 023 */ boolean value_0 = false; /* 024 */ /* 025 */ if (!false &&!(!isnull_2)) { // 如果 id 为空那么整个表达式就是 false /* 026 */ } else { /* 027 */ boolean isnull_3 = true; /* 028 */ boolean value_3 = false; /* 029 */ boolean isnull_4 = i.isnullat(0); // 继续判断 id 是否为空 /* 030 */ int value_4 = isnull_4? // 根据 id 值为空获取对应的值 /* 031 */ -1 : (i.getint(0)); /* 032 */ if (!isnull_4) { // 如果 id 对应的值不为空, 那么判断这个值是否大于 5 /* 033 */ /* 034 */ /* 035 */ isnull_3 = false; // resultcode could change nullability. /* 036 */ value_3 = value_4 > 5; /* 037 */ /* 038 */ } /* 039 */ if (!isnull_3 &&!value_3) { /* 040 */ } else if (!false &&!isnull_3) { //id 之大于 5 3 / 10

4 /* 041 */ value_0 = true; /* 042 */ } else { /* 043 */ isnull_0 = true; /* 044 */ } /* 045 */ } /* 046 */ return!isnull_0 && value_0; // 这个就是表达式 isnotnull(id#8) && (id#8 > 5) 对每行执行的结果 /* 047 */ } /* 048 */ /* 049 */ /* 050 */ } 上面就是对表达式 isnotnull(id#8) && (id#8 > 5) 生成的代码, 里面用到了 org.apache.spark.sql. catalyst.expressions.and org.apache.spark.sql.catalyst.expressions.isnotnull 以及 org.apache.spark.sql.catalyst.expressions.greaterthan 三个 Predicate 的代码生成, 然后组成了上面的 SpecificPredicate SpecificPredicate 会对每行应用 eval 函数去判断是否满足条件, 上面生成的 SpecificPredicate 类逻辑并不复杂, 大家可以去细细品味 表达式代码生成主要是想解决大量虚函数调用 (Virtual Function Calls), 泛化的代价等 需要注意的是, 上面通过表达式生成完整的类代码只有在将 spark.sql.codegen.wholestage 设置为 false 才会进行的, 否则只会生成一部分代码, 并且和其他代码组成 Whole-stage Code 全阶段代码生成 (Whole-stage Code Generation) 全阶段代码生成 (Whole-stage Code Generation), 用来将多个处理逻辑整合到单个代码模块中, 其中也会用到上面的表达式代码生成 和前面介绍的表达式代码生成不一样, 这个是对整个 SQL 过程进行代码生成, 前面的表达式代码生成仅对于表达式的 全阶段代码生成都是继承自 org.apache.spark.sql.execution.bufferedrowiterator 的, 生成的代码需要实现 processnext() 方法, 这个方法会在 org.apache.spark.sql.execution.wholestagecodegenexec 里面的 doexecute 方法里面被调用 而这个方法里面的 rdd 会将数据传进生成的代码里面, 比如我们上文 SQL 这个例子的数据源是 csv 文件, 底层使用 org.apache.spark.sql.execution.filesourcescanexec 这个类读取文件, 然后生成 inputrdd, 这个 rdd 在 WholeStageCodegenExec 类中的 doexecute 方法里面调用生成的代码, 然后执行我们各种判断得到最后的结果 WholeStageCodegenExec 类中的 doexecute 方法部分代码如下 : // rdds 可以从 FileSourceScanExec 的 inputrdds 方法获取 val rdds = child.asinstanceof.inputrdds() 4 / 10

5 ... rdds.head.mappartitionswithindex { (index, iter) => // 编译生成好的代码 val (clazz, _) = CodeGenerator.compile(cleanedSource) // 前面说了所有生成的代码都是继承自 BufferedRowIterator val buffer = clazz.generate(references).asinstanceof[bufferedrowiterator] // 调用生成代码的 init 方法, 主要传入 iter 迭代器, 这里面就是我们要的数据 buffer.init(index, Array(iter)) new Iterator[InternalRow] { override def hasnext: Boolean = { // 这个会调用生成的代码中 processnext() 方法, 这里面就会感觉表达式对每行数据进行判断 val v = buffer.hasnext if (!v) durationms += buffer.durationms() v } override def next: InternalRow = buffer.next() } }... 那么我们生成的代码长什么样呢? 我们还是对前面文章的 SQL 进行分析, 这个 SQL 生成的物理计划如下 : == Physical Plan == *(3) HashAggregate(keys=[], functions=[sum(cast(v#16 as bigint))], output=[sum(v)#22l]) +- Exchange SinglePartition +- *(2) HashAggregate(keys=[], functions=[partial_sum(cast(v#16 as bigint))], output=[sum#2 4L]) +- *(2) Project [(3 + value#1) AS v#16] +- *(2) BroadcastHashJoin [id#0], [id#8], Inner, BuildRight :- *(2) Project [id#0, value#1] : +- *(2) Filter (((((isnotnull(cid#2) && isnotnull(did#3)) && (cid#2 = 1)) && (did#3 = 2)) & & (id#0 > 5)) && isnotnull(id#0)) : +- *(2) FileScan csv [id#0,value#1,cid#2,did#3] Batched: false, Format: CSV, Location : InMemoryFileIndex[file:/iteblog/t1.csv], PartitionFilters: [], PushedFilters: [IsNotNull(cid), IsNo tnull(did), EqualTo(cid,1), EqualTo(did,2), GreaterThan(id,5), IsNotNull(id)], ReadSchema: struct <id:int,value:int,cid:int,did:int> +- BroadcastExchange HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigi nt))) +- *(1) Project [id#8] 5 / 10

6 +- *(1) Filter (isnotnull(id#8) && (id#8 > 5)) +- *(1) FileScan csv [id#8] Batched: false, Format: CSV, Location: InMemoryFileInd ex[file:/iteblog/t2.csv], PartitionFilters: [], PushedFilters: [IsNotNull(id), GreaterThan(id,5)], Rea dschema: struct<id:int> 从上面的物理计划可以看出, 整个 SQL 的执行分为三个阶段 为了简便起见, 我们仅仅分析第一个阶段的代码生成, 也就是下面物理计划 : +- *(1) Project [id#8] +- *(1) Filter (isnotnull(id#8) && (id#8 > 5)) +- *(1) FileScan csv [id#8] Batched: false, Format: CSV, Location: InMemoryFileIndex[file:/it eblog/t2.csv], PartitionFilters: [], PushedFilters: [IsNotNull(id), GreaterThan(id,5)], ReadSchema: struct<id:int> 通过全阶段代码生成, 上面过程得到的代码如下 : Generated code: /* 001 */ public Object generate(object[] references) { /* 002 */ return new GeneratedIteratorForCodegenStage1(references); /* 003 */ } /* 004 */ /* 005 */ // codegenstageid=1 /* 006 */ final class GeneratedIteratorForCodegenStage1 extends org.apache.spark.sql.executi on.bufferedrowiterator { /* 007 */ private Object[] references; /* 008 */ private scala.collection.iterator[] inputs; /* 009 */ private org.apache.spark.sql.catalyst.expressions.codegen.unsaferowwriter[] filter_ mutablestatearray_0 = new org.apache.spark.sql.catalyst.expressions.codegen.unsaferowwrit er[2]; /* 010 */ private scala.collection.iterator[] scan_mutablestatearray_0 = new scala.collection.it erator[1]; /* 011 */ /* 012 */ public GeneratedIteratorForCodegenStage1(Object[] references) { /* 013 */ this.references = references; /* 014 */ } /* 015 */ /* 016 */ public void init(int index, scala.collection.iterator[] inputs) { // 在 WholeStageCodege nexec 类中的 doexecute 被调用 /* 017 */ partitionindex = index; /* 018 */ this.inputs = inputs; 6 / 10

7 /* 019 */ scan_mutablestatearray_0[0] = inputs[0]; /* 020 */ filter_mutablestatearray_0[0] = new org.apache.spark.sql.catalyst.expressions.cod egen.unsaferowwriter(1, 0); /* 021 */ filter_mutablestatearray_0[1] = new org.apache.spark.sql.catalyst.expressions.cod egen.unsaferowwriter(1, 0); /* 022 */ /* 023 */ } /* 024 */ /* 025 */ protected void processnext() throws java.io.ioexception { // 处理每行数据, 这个就 是 isnotnull(id#8) && (id#8 > 5) 表达式的判断 /* 026 */ while (scan_mutablestatearray_0[0].hasnext()) { /* 027 */ InternalRow scan_row_0 = (InternalRow) scan_mutablestatearray_0[0].next(); /* 028 */ ((org.apache.spark.sql.execution.metric.sqlmetric) references[0] /* numoutputr ows */).add(1); /* 029 */ do { /* 030 */ boolean scan_isnull_0 = scan_row_0.isnullat(0); // 判断 id 是否为空 /* 031 */ int scan_value_0 = scan_isnull_0? // 如果为空则 scan_value_0 等于 -1, 否则就是 id 的值 /* 032 */ -1 : (scan_row_0.getint(0)); /* 033 */ /* 034 */ if (!(!scan_isnull_0)) continue; // 如果 id 为空这行数据就不要了 /* 035 */ /* 036 */ boolean filter_value_2 = false; /* 037 */ filter_value_2 = scan_value_0 > 5; //id 是否大于 5 /* 038 */ if (!filter_value_2) continue; // 如果 id 不大于 5, 则这行数据不要了 /* 039 */ /* 040 */ ((org.apache.spark.sql.execution.metric.sqlmetric) references[1] /* numoutput Rows */).add(1); /* 041 */ /* 042 */ filter_mutablestatearray_0[1].reset(); /* 043 */ /* 044 */ if (false) { /* 045 */ filter_mutablestatearray_0[1].setnullat(0); /* 046 */ } else { /* 047 */ filter_mutablestatearray_0[1].write(0, scan_value_0); // 这个就是符合 isnotnull(i d#8) && (id#8 > 5) 表达式的 id /* 048 */ } /* 049 */ append((filter_mutablestatearray_0[1].getrow())); // 得到符号条件的行 /* 050 */ /* 051 */ } while(false); /* 052 */ if (shouldstop()) return; /* 053 */ } /* 054 */ } /* 055 */ /* 056 */ } 7 / 10

8 上面代码逻辑很好理解, 大部分代码我都注释了, 其实就是对每行的 id 进行 isnotnull(id#8) && (id#8 > 5) 表达式判断, 然后拿到符合条件的行 剩余的其他阶段的代码生成和这个类似, 生成的代码有点多, 我就不贴出来了, 感兴趣的同学可以自己去看下 相比 Volcano Iterator Model, 全阶段代码生成的执行过程如下 : 如果想及时了解 Spark Hadoop 或者 HBase 相关的文章, 欢迎关注微信公众号 :iteblog_hadoop 通过引入全阶段代码生成, 大大减少了虚函数的调用, 减少了 CPU 的调用, 使得 SQL 的执行速度有很大提升 代码编译 生成代码之后需要解决的另一个问题是如何将生成的代码进行编译然后加载到同一个 JVM 中去 在早期 Spark 版本是使用 Scala 的 Reflection 和 Quasiquotes 机制来实现代码生成的 Quasiquotes 是一个简洁的符号, 可以让我们轻松操作 Scala 语法树, 具体参见这里 虽然 Quasiquotes 可以很好的为我们解决代码生成等相关的问题, 但是带来的新问题是编译代码时间比较长 ( 大约 50ms - 500ms)! 所以社区不得不默认关闭表达式代码生成 为了解决这个问题,Spark 引入了 Janino 项目, 参见 SPARK-7956 Janino 是一个超级小但又超级快的 Java 编译器. 它不仅能像 javac 工具那样将一组源文件编译成字节码文件, 还可以对一些 Java 表达式, 代码块, 类中的文本 (class body) 或者内存中源文件进行编译, 并把编译后的字节码直接加载到同一个 JVM 中运行 Janino 不是一个开发工具, 而是作为运行时的嵌入式编译器, 比如作为表达式求值的翻译器或类似于 JSP 的服务端页面引擎, 关于 Janino 的更多知识请参见这里 通过引入了 Janino 来编译生成的代码, 结果显示 SQL 表达式的编译时间减少到 5ms 在 Spark 中使用了 ClassBodyEvaluator 来编译生成之后的代码, 参见 org.apache.spark.sql.catalyst.expressions.codegen.codegenerator 需要主要的是, 代码生成是在 Driver 端进行的, 而代码编译是在 Executor 端进行的 SQL 执行 终于到了 SQL 真正执行的地方了 这个时候 Spark 会执行上阶段生成的代码, 然后得到最终的结果,DAG 执行图如下 : 8 / 10

9 9 / 10

10 Powered by TCPDF ( 如果想及时了解 Spark Hadoop 或者 HBase 相关的文章, 欢迎关注微信公众号 :iteblog_hadoop 本博客文章除特别声明, 全部都是原创! 转载本文请加上 : 转载自过往记忆 ( 本文链接 : () 10 / 10

Spark读取Hbase中的数据

Spark读取Hbase中的数据 Spark 读取 Hbase 中的数据 Spark 和 Flume-ng 整合, 可以参见本博客 : Spark 和 Flume-ng 整合 使用 Spark 读取 HBase 中的数据 如果想及时了解 Spark Hadoop 或者 Hbase 相关的文章, 欢迎关注微信公共帐号 :iteblog_hadoop 大家可能都知道很熟悉 Spark 的两种常见的数据读取方式 ( 存放到 RDD 中 ):(1)

More information

使用Cassandra和Spark 2.0实现Rest API服务

使用Cassandra和Spark 2.0实现Rest API服务 使用 Cassandra 和 Spark 2.0 实现 Rest API 服务 在这篇文章中, 我将介绍如何在 Spark 中使用 Akkahttp 并结合 Cassandra 实现 REST 服务, 在这个系统中 Cassandra 用于数据的存储 我们已经见识到 Spark 的威力, 如果和 Cassandra 正确地结合可以实现更强大的系统 我们先创建一个 build.sbt 文件, 内容如下

More information

通过Hive将数据写入到ElasticSearch

通过Hive将数据写入到ElasticSearch 我在 使用 Hive 读取 ElasticSearch 中的数据 文章中介绍了如何使用 Hive 读取 ElasticSearch 中的数据, 本文将接着上文继续介绍如何使用 Hive 将数据写入到 ElasticSearch 中 在使用前同样需要加入 elasticsearch-hadoop-2.3.4.jar 依赖, 具体请参见前文介绍 我们先在 Hive 里面建个名为 iteblog 的表,

More information

Guava学习之Resources

Guava学习之Resources Resources 提供提供操作 classpath 路径下所有资源的方法 除非另有说明, 否则类中所有方法的参数都不能为 null 虽然有些方法的参数是 URL 类型的, 但是这些方法实现通常不是以 HTTP 完成的 ; 同时这些资源也非 classpath 路径下的 下面两个函数都是根据资源的名称得到其绝对路径, 从函数里面可以看出,Resources 类中的 getresource 函数都是基于

More information

Apache CarbonData集群模式使用指南

Apache CarbonData集群模式使用指南 我们在 Apache CarbonData 快速入门编程指南 文章中介绍了如何快速使用 Apache CarbonData, 为了简单起见, 我们展示了如何在单机模式下使用 Apache CarbonData 但是生产环境下一般都是使用集群模式, 本文主要介绍如何在集群模式下使用 Apache CarbonData 启动 Spark shell 这里以 Spark shell 模式进行介绍,master

More information

使用MapReduce读取XML文件

使用MapReduce读取XML文件 使用 MapReduce 读取 XML 文件 XML( 可扩展标记语言, 英语 :extensible Markup Language, 简称 : XML) 是一种标记语言, 也是行业标准数据交换交换格式, 它很适合在系统之间进行数据存储和交换 ( 话说 Hadoop H ive 等的配置文件就是 XML 格式的 ) 本文将介绍如何使用 MapReduce 来读取 XML 文件 但是 Had oop

More information

Flume-ng与Mysql整合开发

Flume-ng与Mysql整合开发 Flume-ng 与 Mysql 整合开发 我们知道,Flume 可以和许多的系统进行整合, 包括了 Hadoop Spark Kafka Hbase 等等 ; 当然, 强悍的 Flume 也是可以和 Mysql 进行整合, 将分析好的日志存储到 Mysql( 当然, 你也可以存放到 pg oracle 等等关系型数据库 ) 不过我这里想多说一些 :Flume 是分布式收集日志的系统 ; 既然都分布式了,

More information

Hadoop&Spark解决二次排序问题(Hadoop篇)

Hadoop&Spark解决二次排序问题(Hadoop篇) Hadoop&Spark 解决二次排序问题 (Spark 篇 ) 问题描述 二次排序就是 key 之间有序, 而且每个 Key 对应的 value 也是有序的 ; 也就是对 MapReduce 的输出 (KEY, Value(v 1,v 2,v 3,...,v n )) 中的 Value(v 1,v 2,v 3,...,v n ) 值进行排序 ( 升序或者降序 ), 使得 Value(s 1,s 2,s

More information

如何在 Apache Hive 中解析 Json 数组

如何在 Apache Hive 中解析 Json 数组 问题 我们都知道,Hive 内部提供了大量的内置函数用于处理各种类型的需求, 参见官方文档 :Hive Operators and User-Defined Functions (UDFs) 我们从这些内置的 UDF 可以看到两个用于解析 Json 的函数 :get_json_object 和 json_tuple 用过这两个函数的同学肯定知道, 其职能解析最普通的 Json 字符串, 如下 : hive

More information

OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数

OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数 复习 类的复用 组合 (composition): has-a 关系 class MyType { public int i; public double d; public char c; public void set(double

More information

使用Spark SQL读取Hive上的数据

使用Spark SQL读取Hive上的数据 使用 Spark SQL 读取 Hive 上的数据 Spark SQL 主要目的是使得用户可以在 Spark 上使用 SQL, 其数据源既可以是 RDD, 也可以是外部的数据源 ( 比如 Parquet Hive Json 等 ) Spark SQL 的其中一个分支就是 Spark on Hive, 也就是使用 Hive 中 HQL 的解析 逻辑执行计划翻译 执行计划优化等逻辑, 可以近似认为仅将物理执行计划从

More information

新・解きながら学ぶJava

新・解きながら学ぶJava 481! 41, 74!= 40, 270 " 4 % 23, 25 %% 121 %c 425 %d 121 %o 121 %x 121 & 199 && 48 ' 81, 425 ( ) 14, 17 ( ) 128 ( ) 183 * 23 */ 3, 390 ++ 79 ++ 80 += 93 + 22 + 23 + 279 + 14 + 124 + 7, 148, 16 -- 79 --

More information

Guava学习之CharSequenceReader

Guava学习之CharSequenceReader CharSequenceReader 类是以 CharSequence 的形式读取字符 CharSequenceReader 类继承自 Reader 类, 除了 remaining() hasremaining() 以及 checkopen() 函数之后, 其他的函数都是重写 Reader 类中的函数 CharSequenceReader 类声明没有用 public 关键字, 所以我们暂时还不能调用这个类

More information

三种方法实现Hadoop(MapReduce)全局排序(1)

三种方法实现Hadoop(MapReduce)全局排序(1) 三种方法实现 Hadoop(MapReduce) 全局排序 () 三种方法实现 Hadoop(MapReduce) 全局排序 () 我们可能会有些需求要求 MapReduce 的输出全局有序, 这里说的有序是指 Key 全局有序 但是我们知道,MapReduce 默认只是保证同一个分区内的 Key 是有序的, 但是不保证全局有序 基于此, 本文提供三种方法来对 MapReduce 的输出进行全局排序

More information

SparkR(R on Spark)编程指南

SparkR(R on Spark)编程指南 概论 SparkR 是一个 R 语言包, 它提供了轻量级的方式使得可以在 R 语言中使用 Apache Spark 在 Spark 1.4 中,SparkR 实现了分布式的 data frame, 支持类似查询 过滤以及聚合的操作 ( 类似于 R 中的 data frames:dplyr), 但是这个可以操作大规模的数据集 SparkR DataFrames DataFrame 是数据组织成一个带有列名称的分布式数据集

More information

Spark 2.0介绍:在Spark SQL中定义查询优化规则

Spark 2.0介绍:在Spark SQL中定义查询优化规则 Spark 2.0 介绍 : 在 Spark SQL 中定义查询优化规则 Spark 2.0 技术预览 : 更容易 更快速 更智能 文章中简单地介绍了 Spark 2.0 带来的新技术等 Spark 2.0 是 Apache Spark 的下一个主要版本 此版本在架构抽象 API 以及平台的类库方面带来了很大的变化, 为该框架明年的发展奠定了方向, 所以了解 Spark 2.0 的一些特性对我们能够使用它有着非常重要的作用

More information

使用Apache Beam读写HDFS上的文件

使用Apache Beam读写HDFS上的文件 Apache Beam( 原名 Google DataFlow) 是 Google 在 2016 年 2 月份贡献给 Apache 基金会的 Apache 孵化项目, 被认为是继 MapReduce,GFS 和 BigQuery 等之后,Google 在大数据处理领域对开源社区的又一个非常大的贡献 Apache Beam 的主要目标是统一批处理和流处理的编程范式, 为无限, 乱序,web-scale

More information

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 4 月 19 日晚 9 点 复习 类的复用 组合 (composition): has-a 关系 class MyType { public int i; public double d; public char c; public void set(double x) { d

More information

Kafka客户端是如何找到 leader 分区的

Kafka客户端是如何找到 leader 分区的 在正常情况下,Kafka 中的每个 Topic 都会有很多个分区, 每个分区又会存在多个副本 在这些副本中, 存在一个 leader 分区, 而剩下的分区叫做 follower, 所有对分区的读写操作都是对 leader 分区进行的 所以当我们向 Kafka 写消息或者从 Kafka 读取消息的时候, 必须先找到对应分区的 Lea der 及其所在的 Broker 地址, 这样才可以进行后续的操作

More information

Hive:用Java代码通过JDBC连接Hiveserver

Hive:用Java代码通过JDBC连接Hiveserver Hive: 用 Java 代码通过 JDBC 连接 Hiveserver 我们可以通过 CLI Client Web UI 等 Hive 提供的用户接口来和 Hive 通信, 但这三种方式最常用的是 CLI;Client 是 Hive 的客户端, 用户连接至 Hive Server 在启动 Client 模式的时候, 需要指出 Hive Server 所在节点, 并且在该节点启动 Hive Server

More information

在Spring中使用Kafka:Producer篇

在Spring中使用Kafka:Producer篇 在某些情况下, 我们可能会在 Spring 中将一些 WEB 上的信息发送到 Kafka 中, 这时候我们就需要在 Spring 中编写 Producer 相关的代码了 ; 不过高兴的是,Spring 本身提供了操作 Kafka 的相关类库, 我们可以直接通过 xml 文件配置然后直接在后端的代码中使用 Kafka, 非常地方便 本文将介绍如果在 Spring 中将消息发送到 Kafka 在这之前,

More information

エスポラージュ株式会社 住所 : 東京都江東区大島 東急ドエルアルス大島 HP: ******************* * 关于 Java 测试试题 ******

エスポラージュ株式会社 住所 : 東京都江東区大島 東急ドエルアルス大島 HP:  ******************* * 关于 Java 测试试题 ****** ******************* * 关于 Java 测试试题 ******************* 問 1 运行下面的程序, 选出一个正确的运行结果 public class Sample { public static void main(string[] args) { int[] test = { 1, 2, 3, 4, 5 ; for(int i = 1 ; i System.out.print(test[i]);

More information

<4D6963726F736F667420506F776572506F696E74202D20332D322E432B2BC3E6CFF2B6D4CFF3B3CCD0F2C9E8BCC6A1AAD6D8D4D8A1A2BCCCB3D0A1A2B6E0CCACBACDBEDBBACF2E707074>

<4D6963726F736F667420506F776572506F696E74202D20332D322E432B2BC3E6CFF2B6D4CFF3B3CCD0F2C9E8BCC6A1AAD6D8D4D8A1A2BCCCB3D0A1A2B6E0CCACBACDBEDBBACF2E707074> 程 序 设 计 实 习 INFO130048 3-2.C++ 面 向 对 象 程 序 设 计 重 载 继 承 多 态 和 聚 合 复 旦 大 学 计 算 机 科 学 与 工 程 系 彭 鑫 pengxin@fudan.edu.cn 内 容 摘 要 方 法 重 载 类 的 继 承 对 象 引 用 和 拷 贝 构 造 函 数 虚 函 数 和 多 态 性 类 的 聚 集 复 旦 大 学 计 算 机 科 学

More information

帝国CMS下在PHP文件中调用数据库类执行SQL语句实例

帝国CMS下在PHP文件中调用数据库类执行SQL语句实例 帝国 CMS 下在 PHP 文件中调用数据库类执行 SQL 语句实例 这篇文章主要介绍了帝国 CMS 下在 PHP 文件中调用数据库类执行 SQL 语句实例, 本文还详细介绍了帝国 CMS 数据库类中的一些常用方法, 需要的朋友可以参考下 例 1: 连接 MYSQL 数据库例子 (a.php)

More information

詞 彙 表 編 號 詞 彙 描 述 1 預 約 人 資 料 中 文 姓 名 英 文 姓 名 身 份 證 字 號 預 約 人 電 話 性 別 2 付 款 資 料 信 用 卡 別 信 用 卡 號 信 用 卡 有 效 日 期 3 住 房 條 件 入 住 日 期 退 房 日 期 人 數 房 間 數 量 入

詞 彙 表 編 號 詞 彙 描 述 1 預 約 人 資 料 中 文 姓 名 英 文 姓 名 身 份 證 字 號 預 約 人 電 話 性 別 2 付 款 資 料 信 用 卡 別 信 用 卡 號 信 用 卡 有 效 日 期 3 住 房 條 件 入 住 日 期 退 房 日 期 人 數 房 間 數 量 入 100 年 特 種 考 試 地 方 政 府 公 務 人 員 考 試 試 題 等 別 : 三 等 考 試 類 科 : 資 訊 處 理 科 目 : 系 統 分 析 與 設 計 一 請 參 考 下 列 旅 館 管 理 系 統 的 使 用 案 例 圖 (Use Case Diagram) 撰 寫 預 約 房 間 的 使 用 案 例 規 格 書 (Use Case Specification), 繪 出 入

More information

使用Hive读取ElasticSearch中的数据

使用Hive读取ElasticSearch中的数据 本文将介绍如何通过 Hive 来读取 ElasticSearch 中的数据, 然后我们可以像操作其他正常 Hive 表一样, 使用 Hive 来直接操作 ElasticSearch 中的数据, 将极大的方便开发人员 本文使用的各组件版本分别为 Hive0.12 Hadoop-2.2.0 ElasticSearch 2.3.4 我们先来看看 ElasticSearch 中相关表的 mapping: {

More information

Hadoop元数据合并异常及解决方法

Hadoop元数据合并异常及解决方法 Hadoop 元数据合并异常及解决方法 这几天观察了一下 Standby NN 上面的日志, 发现每次 Fsimage 合并完之后,Standby NN 通知 Active NN 来下载合并好的 Fsimage 的过程中会出现以下的异常信息 : 2014-04-23 14:42:54,964 ERROR org.apache.hadoop.hdfs.server.namenode.ha. StandbyCheckpointer:

More information

Microsoft Word - 01.DOC

Microsoft Word - 01.DOC 第 1 章 JavaScript 简 介 JavaScript 是 NetScape 公 司 为 Navigator 浏 览 器 开 发 的, 是 写 在 HTML 文 件 中 的 一 种 脚 本 语 言, 能 实 现 网 页 内 容 的 交 互 显 示 当 用 户 在 客 户 端 显 示 该 网 页 时, 浏 览 器 就 会 执 行 JavaScript 程 序, 用 户 通 过 交 互 式 的

More information

untitled

untitled 1 Outline 數 料 數 數 列 亂數 練 數 數 數 來 數 數 來 數 料 利 料 來 數 A-Z a-z _ () 不 數 0-9 數 不 數 SCHOOL School school 數 讀 school_name schoolname 易 不 C# my name 7_eleven B&Q new C# (1) public protected private params override

More information

Microsoft Word - ch04三校.doc

Microsoft Word - ch04三校.doc 4-1 4-1-1 (Object) (State) (Behavior) ( ) ( ) ( method) ( properties) ( functions) 4-2 4-1-2 (Message) ( ) ( ) ( ) A B A ( ) ( ) ( YourCar) ( changegear) ( lowergear) 4-1-3 (Class) (Blueprint) 4-3 changegear

More information

前言 C# C# C# C C# C# C# C# C# microservices C# More Effective C# More Effective C# C# C# C# Effective C# 50 C# C# 7 Effective vii

前言 C# C# C# C C# C# C# C# C# microservices C# More Effective C# More Effective C# C# C# C# Effective C# 50 C# C# 7 Effective vii 前言 C# C# C# C C# C# C# C# C# microservices C# More Effective C# More Effective C# C# C# C# Effective C# 50 C# C# 7 Effective vii C# 7 More Effective C# C# C# C# C# C# Common Language Runtime CLR just-in-time

More information

Chapter 9: Objects and Classes

Chapter 9: Objects and Classes Java application Java main applet Web applet Runnable Thread CPU Thread 1 Thread 2 Thread 3 CUP Thread 1 Thread 2 Thread 3 ,,. (new) Thread (runnable) start( ) CPU (running) run ( ) blocked CPU sleep(

More information

Ioncube Php Encoder 8 3 Crack 4. llamaba octobre traslado General Search colony

Ioncube Php Encoder 8 3 Crack 4. llamaba octobre traslado General Search colony Ioncube Php Encoder 8 3 Crack 4 ->>->>->> DOWNLOAD 1 / 5 2 / 5 Press..the..General..Tools..category4Encrypt..and..protect..files..with..PHP..encoding,..encryption,..ob fuscation..and..licensing... 2016

More information

六种使用Linux命令发送带附件的邮件

六种使用Linux命令发送带附件的邮件 六种使用 Linux 命令发送带附件的邮件 在很多场景中我们会使用 Shell 命令来发送邮件, 而且我们还可能在邮件里面添加附件, 本文将介绍使用 Shell 命令发送带附件邮件的几种方式, 希望对大家有所帮助 如果想及时了解 Spark Hadoop 或者 Hbase 相关的文章, 欢迎关注微信公共帐号 :iteblog_hadoop 使用 mail 命令 mail 命令是 mailutils(on

More information

韶关:神奇丹霞

韶关:神奇丹霞 丹霞山 南华寺 六祖慧能 韶乐 曹溪假日温泉 马坝人遗址 珠玑 巷 乳源必背瑶寨 乳源大峡谷 封面... 1 一 韶关 山水之城 神奇丹霞... 3 二 韶关不过错过的美景... 5 三 韶关行程推荐... 9 四 韶关交通... 10 1 铁路... 10 2 公路... 10 3 内部交通... 4 韶关至香港直通巴士... 五 韶关娱乐 享受慢生活... 六 韶关特产带回家... 七 食在韶关...

More information

PowerPoint 演示文稿

PowerPoint 演示文稿 Apache Spark 与 多 数 据 源 的 结 合 田 毅 @ 目 录 为 什 么 会 用 到 多 个 数 据 源 Spark 的 多 数 据 源 方 案 有 哪 些 已 有 的 数 据 源 支 持 Spark 在 GrowingIO 的 实 践 分 享 为 什 么 会 用 到 多 个 数 据 源 从 数 据 本 身 来 看 大 数 据 的 特 性 之 一 :Variety 数 据 的 多 样

More information

Apache Spark 2.4 新增内置函数和高阶函数使用介绍

Apache Spark 2.4 新增内置函数和高阶函数使用介绍 Apache Spark 2.4 新增了 24 个内置函数和 5 个高阶函数, 本文将对这 29 个函数的使用进行介绍 关于 Apache Spark 2.4 的新特性, 可以参见 Apache Spark 2.4 正式发布, 重要功能详细介绍 如果想及时了解 Spark Hadoop 或者 Hbase 相关的文章, 欢迎关注微信公共帐号 :iteblog_hadoop 针对数组类型的函数 array_distinct

More information

OOP with Java 通知 Project 4: 5 月 2 日晚 9 点

OOP with Java 通知 Project 4: 5 月 2 日晚 9 点 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 5 月 2 日晚 9 点 复习 类的复用 组合 (composition): has-a 关系 class MyType { public int i; public double d; public char c; public void set(double x) { d =

More information

(TestFailure) JUnit Framework AssertionFailedError JUnit Composite TestSuite Test TestSuite run() run() JUnit

(TestFailure) JUnit Framework AssertionFailedError JUnit Composite TestSuite Test TestSuite run() run() JUnit Tomcat Web JUnit Cactus JUnit Java Cactus JUnit 26.1 JUnit Java JUnit JUnit Java JSP Servlet JUnit Java Erich Gamma Kent Beck xunit JUnit boolean JUnit Java JUnit Java JUnit Java 26.1.1 JUnit JUnit How

More information

11 天 山 区 区 环 卫 清 运 队 机 械 工 程 师 4011 C 1 不 限 不 限 机 电 具 有 两 以 工 作 经 12 天 山 区 乌 鲁 木 齐 市 第 15 小 会 计 4012 C 1 不 限 不 限 会 计 财 会 财 电 算 化 临 床 医 预 防 医 公 共 卫 生 与

11 天 山 区 区 环 卫 清 运 队 机 械 工 程 师 4011 C 1 不 限 不 限 机 电 具 有 两 以 工 作 经 12 天 山 区 乌 鲁 木 齐 市 第 15 小 会 计 4012 C 1 不 限 不 限 会 计 财 会 财 电 算 化 临 床 医 预 防 医 公 共 卫 生 与 2013 乌 鲁 木 齐 市 事 业 单 工 作 员 表 序 1 天 山 区 区 委 财 经 领 导 小 组 办 公 室 ( 金 融 工 作 办 公 室 ) 金 融 工 作 专 干 4001 C 2 不 限 不 限 硕 士 研 究 生 会 计 财 务 管 理 财 务 会 计 基 建 会 计 行 政 事 业 财 务 会 计 2 天 山 区 区 园 林 队 会 计 4002 C 1 不 限 不 限 财

More information

untitled

untitled 1 Outline 料 類 說 Tang, Shih-Hsuan 2006/07/26 ~ 2006/09/02 六 PM 7:00 ~ 9:30 聯 ives.net@gmail.com www.csie.ntu.edu.tw/~r93057/aspnet134 度 C# 力 度 C# Web SQL 料 DataGrid DataList 參 ASP.NET 1.0 C# 例 ASP.NET 立

More information

哼, 你 們 不 回 答 又 怎 麼 樣? 不 管 是 多 大 來 頭, 現 在 都 被 血 魔 吞 噬 無 蹤 了 你 們 幾 個 真 是 太 過 分, 我 不 犯 你 們, 你 們 卻 一 天 到 晚 來 挑 釁 我 教 尊 冷 笑 著 說 道 嗚, 大 人 土 地 大 姐 跪 下 來, 流 下

哼, 你 們 不 回 答 又 怎 麼 樣? 不 管 是 多 大 來 頭, 現 在 都 被 血 魔 吞 噬 無 蹤 了 你 們 幾 個 真 是 太 過 分, 我 不 犯 你 們, 你 們 卻 一 天 到 晚 來 挑 釁 我 教 尊 冷 笑 著 說 道 嗚, 大 人 土 地 大 姐 跪 下 來, 流 下 [tw] 天 醫 傳 奇 覺 醒 篇 [/tw][cn] 天 医 传 奇 觉 醒 篇 [/cn] 我 跌 坐 在 這 團 奇 異 的 麻 糬 上 面 城 隍 爺 和 土 地 大 姐 也 大 驚 失 色, 趕 緊 拉 住 我 的 手, 想 要 把 我 拉 起 來 看 來, 城 隍 爺 真 的 不 是 故 意 的 當 然, 我 並 不 排 除 他 們 現 在 仍 然 在 演 戲, 大 概 怕 一 旦 我

More information

SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 "odps-sdk" 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基

SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 odps-sdk 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基 开放数据处理服务 ODPS SDK SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 "odps-sdk" 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基础功能的主体接口, 搜索关键词 "odpssdk-core" 一些

More information

1 4 1.1 4 1.2..4 2..4 2.1..4 3.4 3.1 Java.5 3.1.1..5 3.1.2 5 3.1.3 6 4.6 4.1 6 4.2.6 5 7 5.1..8 5.1.1 8 5.1.2..8 5.1.3..8 5.1.4..9 5.2..9 6.10 6.1.10

1 4 1.1 4 1.2..4 2..4 2.1..4 3.4 3.1 Java.5 3.1.1..5 3.1.2 5 3.1.3 6 4.6 4.1 6 4.2.6 5 7 5.1..8 5.1.1 8 5.1.2..8 5.1.3..8 5.1.4..9 5.2..9 6.10 6.1.10 Java V1.0.1 2007 4 10 1 4 1.1 4 1.2..4 2..4 2.1..4 3.4 3.1 Java.5 3.1.1..5 3.1.2 5 3.1.3 6 4.6 4.1 6 4.2.6 5 7 5.1..8 5.1.1 8 5.1.2..8 5.1.3..8 5.1.4..9 5.2..9 6.10 6.1.10 6.2.10 6.3..10 6.4 11 7.12 7.1

More information

伊春:醉人林都

伊春:醉人林都 林海 雪淞 山野菜 狩猎 大丰河漂流 滑雪场 杜鹃花海 东北大 集 封面... 1 一 美丽林都 天然氧吧... 4 二 伊春旅游最棒体验... 6 1 春季 赏万紫千红杜鹃花海... 6 2 夏季 瞧林都醉人绿色海洋... 7 3 秋季 观层林染金梦幻美景... 8 4 冬季 看林海雪原雪凇奇观... 8 5 铁力市赶东北大集 感受风风火火的东北风情... 6 伊春狩猎 做回野性的东北汉子...

More information

Spark作业代码(源码)IDE远程调试

Spark作业代码(源码)IDE远程调试 我们在编写 Spark Application 或者是阅读源码的时候, 我们很想知道代码的运行情况, 比如参数设置的是否正确等等 用 Logging 方式来调试是一个可以选择的方式, 但是,logging 方式调试代码有很多的局限和不便 今天我就来介绍如何通过 IDE 来远程调试 Spark 的 Application 或者是 Spar k 的源码 本文以调试 Spark Application 为例进行说明,

More information

基于CDIO一体化理念的课程教学大纲设计

基于CDIO一体化理念的课程教学大纲设计 Java 语 言 程 序 设 计 课 程 教 学 大 纲 Java 语 言 程 序 设 计 课 程 教 学 大 纲 一 课 程 基 本 信 息 1. 课 程 代 码 :52001CC022 2. 课 程 名 称 :Java 语 言 程 序 设 计 3. 课 程 英 文 名 称 :Java Programming 4. 课 程 类 别 : 理 论 课 ( 含 实 验 上 机 或 实 践 ) 5. 授

More information

09 (File Processes) (mkdir) 9-3 (createnewfile) 9-4 (write) 9-5 (read) 9-6 (deletefile) 9-7 (deletedir) (Exercises)

09 (File Processes) (mkdir) 9-3 (createnewfile) 9-4 (write) 9-5 (read) 9-6 (deletefile) 9-7 (deletedir) (Exercises) 09 (File Processes) 9-1 9-2 (mkdir) 9-3 (createnewfile) 9-4 (write) 9-5 (read) 9-6 (deletefile) 9-7 (deletedir) (Exercises) Java Servlet 9-1 Servlet (File Processes) Client Servlet Servlet Java Java (Stream)

More information

KillTest 质量更高 服务更好 学习资料 半年免费更新服务

KillTest 质量更高 服务更好 学习资料   半年免费更新服务 KillTest 质量更高 服务更好 学习资料 http://www.killtest.cn 半年免费更新服务 Exam : 310-065Big5 Title : Sun Certified Programmer for the Java 2 Platform, SE 6.0 Version : Demo 1 / 14 1. 35. String #name = "Jane Doe"; 36. int

More information

1 Framework.NET Framework Microsoft Windows.NET Framework.NET Framework NOTE.NET NET Framework.NET Framework 2.0 ( 3 ).NET Framework 2.0.NET F

1 Framework.NET Framework Microsoft Windows.NET Framework.NET Framework NOTE.NET NET Framework.NET Framework 2.0 ( 3 ).NET Framework 2.0.NET F 1 Framework.NET Framework Microsoft Windows.NET Framework.NET Framework NOTE.NET 2.0 2.0.NET Framework.NET Framework 2.0 ( 3).NET Framework 2.0.NET Framework ( System ) o o o o o o Boxing UnBoxing() o

More information

ASP.NET实现下拉框二级联动组件

ASP.NET实现下拉框二级联动组件 ASP.NET 实现下拉框二级联动组件 namespace WebApplicationDlh using System.Drawing; using System.Web; using System.Web.UI.WebControls; using System.Web.UI.HtmlControls; using Db; / / Area 的摘要说明 /

More information

基于ECO的UML模型驱动的数据库应用开发1.doc

基于ECO的UML模型驱动的数据库应用开发1.doc ECO UML () Object RDBMS Mapping.Net Framework Java C# RAD DataSetOleDbConnection DataGrod RAD Client/Server RAD RAD DataReader["Spell"].ToString() AObj.XXX bug sql UML OR Mapping RAD Lazy load round trip

More information

2009年3月全国计算机等级考试二级Java语言程序设计笔试试题

2009年3月全国计算机等级考试二级Java语言程序设计笔试试题 2009 年 3 月 全 国 计 算 机 等 级 考 试 笔 试 试 卷 二 级 Java 语 言 程 序 设 计 ( 考 试 时 间 90 分 钟, 满 分 100 分 ) 一 选 择 题 ( 每 题 2 分, 共 70 分 ) 下 列 各 题 A) B) C) D) 四 个 选 项 中, 只 有 一 个 选 项 是 正 确 的 请 将 正 确 选 项 填 涂 在 答 题 卡 相 应 位 置 上,

More information

Flink on YARN部署快速入门指南

Flink on YARN部署快速入门指南 Apache Flink 是一个高效 分布式 基于 Java 和 Scala( 主要是由 Java 实现 ) 实现的通用大数据分析引擎, 它具有分布式 MapReduce 一类平台的高效性 灵活性和扩展性以及并行数据库查询优化方案, 它支持批量和基于流的数据分析, 且提供了基于 Java 和 Scala 的 API 从 Flink 官方文档可以知道, 目前 Flink 支持三大部署模式 :Local

More information

untitled

untitled 1 Outline 類别 欄 (1) 類 類 狀 更 易 類 理 若 類 利 來 利 using 來 namespace 類 ; (2) namespace IBM class Notebook namespace Compaq class Notebook 類别 類 來 類 列 欄 (field) (property) (method) (event) 類 例 立 來 車 類 類 立 車 欄 料

More information

EJB-Programming-4-cn.doc

EJB-Programming-4-cn.doc EJB (4) : (Entity Bean Value Object ) JBuilder EJB 2.x CMP EJB Relationships JBuilder EJB Test Client EJB EJB Seminar CMP Entity Beans Session Bean J2EE Session Façade Design Pattern Session Bean Session

More information

untitled

untitled 1 行 行 行 行.NET 行 行 類 來 行 行 Thread 類 行 System.Threading 來 類 Thread 類 (1) public Thread(ThreadStart start ); Name 行 IsAlive 行 行狀 Start 行 行 Suspend 行 Resume 行 行 Thread 類 (2) Sleep 行 CurrentThread 行 ThreadStart

More information

Spark1.4中DataFrame功能加强,新增科学和数学函数

Spark1.4中DataFrame功能加强,新增科学和数学函数 Spark1.4 中 DataFrame 功能加强, 新增科学和数学函数 社区在 Spark 1.3 中开始引入了 DataFrames, 使得 Apache Spark 更加容易被使用 受 R 和 Python 中的 data frames 激发,Spark 中的 DataFrames 提供了一些 A PI, 这些 API 在外部看起来像是操作单机的数据一样, 而数据科学家对这些 API 非常地熟悉

More information

将 MySQL 的全量数据导入到 Apache Solr 中

将 MySQL 的全量数据导入到 Apache Solr 中 关于分页方式导入全量数据请参照 将 MySQL 的全量数据以分页的形式导入到 Apache Solr 中 在前面几篇文章中我们介绍了如何通过 Solr 的 post 命令将各种各样的文件导入到已经创建好的 Core 或 Collection 中 但有时候我们需要的数据并不在文件里面, 而是在别的系统中, 比如 MySql 里面 不过高兴的是,Solr 针对这些数据也提供了强大的数据导入工具, 这就是

More information

全国计算机技术与软件专业技术资格(水平)考试

全国计算机技术与软件专业技术资格(水平)考试 全 国 计 算 机 技 术 与 软 件 专 业 技 术 资 格 ( 水 平 ) 考 试 2008 年 上 半 年 程 序 员 下 午 试 卷 ( 考 试 时 间 14:00~16:30 共 150 分 钟 ) 试 题 一 ( 共 15 分 ) 阅 读 以 下 说 明 和 流 程 图, 填 补 流 程 图 中 的 空 缺 (1)~(9), 将 解 答 填 入 答 题 纸 的 对 应 栏 内 [ 说 明

More information

关林:武圣陵寝

关林:武圣陵寝 舞楼 关圣 关冢 关林国际朝圣大典 碑亭 平安殿 财神殿 朝圣 祭拜 纳祥 武帝陵寝 封面... 1 一 关林:千年关林 忠魂归处... 4 二 关林门票详解... 5 三 祈福圣域 纳祥佳地... 6 1 古建典范 舞楼... 6 2 崇高地位标识符 大门... 7 3 威扬六合 庄严仪门... 8 4 石刻典范 石狮御道... 9 5 气势恢宏 平安殿... 6 求财请愿 财神殿... 7 秀里藏忠义

More information

泰山:五岳独尊

泰山:五岳独尊 山东 泰山 东岳 封禅 观云海 看日出 十八盘 煎饼 羊汤 封面... 1 一 泰山简介及门票信息... 3 二 如何到泰山去... 5 三 泰山主要景点介绍... 9 四 泰山游行程推荐... 13 五 最经典的线路 红门线... 15 1 时间要把握好啊... 16 六 最省时的线路 天外村线... 七 最便捷的线路 桃花峪线... 八 最绿色的线路 天烛胜境线... 九 去泰山住哪儿... 十

More information

FY.DOC

FY.DOC 高 职 高 专 21 世 纪 规 划 教 材 C++ 程 序 设 计 邓 振 杰 主 编 贾 振 华 孟 庆 敏 副 主 编 人 民 邮 电 出 版 社 内 容 提 要 本 书 系 统 地 介 绍 C++ 语 言 的 基 本 概 念 基 本 语 法 和 编 程 方 法, 深 入 浅 出 地 讲 述 C++ 语 言 面 向 对 象 的 重 要 特 征 : 类 和 对 象 抽 象 封 装 继 承 等 主

More information

Flink快速上手(QuickStart)

Flink快速上手(QuickStart) 安装 : 下载并启动 Flink 可以在 Linux Mac OS X 以及 Windows 上运行 为了能够运行 Flink, 唯一的要求是必须安装 Java 7.x 或者更高版本 对于 Windows 用户来说, 请参考 Flink on Windows 文档, 里面介绍了如何在 Window 本地运行 Flink 下载 从下载页面 (http://flink.apache.org/downloads.html)

More information

国内26省市新能源汽车推广规划已出台

国内26省市新能源汽车推广规划已出台 国 内 26 省 市 新 能 源 汽 车 推 广 规 划 已 出 台 [ 摘 要 ] 北 京 深 圳 上 海 无 锡 山 西 河 北 沈 阳 长 春 乌 鲁 木 齐 新 疆 泸 州 青 海 哈 尔 滨 等 26 省 市 新 能 源 汽 车 2016 规 划 ( 部 分 省 市 为 十 三 五 规 划 ) 出 炉 中 国 新 能 源 汽 车 从 十 城 千 辆 计 划 启 动 以 来,2009 年 到

More information

Microsoft Word - 第3章.doc

Microsoft Word - 第3章.doc Java C++ Pascal C# C# if if if for while do while foreach while do while C# 3.1.1 ; 3-1 ischeck Test() While ischeck while static bool ischeck = true; public static void Test() while (ischeck) ; ischeck

More information

, 7, Windows,,,, : ,,,, ;,, ( CIP) /,,. : ;, ( 21 ) ISBN : -. TP CIP ( 2005) 1

, 7, Windows,,,, : ,,,, ;,, ( CIP) /,,. : ;, ( 21 ) ISBN : -. TP CIP ( 2005) 1 21 , 7, Windows,,,, : 010-62782989 13501256678 13801310933,,,, ;,, ( CIP) /,,. : ;, 2005. 11 ( 21 ) ISBN 7-81082 - 634-4... - : -. TP316-44 CIP ( 2005) 123583 : : : : 100084 : 010-62776969 : 100044 : 010-51686414

More information

PowerPoint 演示文稿

PowerPoint 演示文稿 The BitCoin Scripting Language 交易实例 交易结构 "result": { "txid": "921a dd24", "hash": "921a dd24", "version": 1, "size": 226, "locktime": 0, "vin": [ ], "vout": [ ], "blockhash": "0000000000000000002c510d

More information

DPark MapReduce (Davies) davies@douban.com 2011/12/07 Velocity China 2011 Douban Douban 5500 Douban 5500 1000G, Douban 5500 1000G, 60+ Douban 5500 1000G, 60+ 200+ Douban 5500 1000G, 60+ 200+ > MooseFS

More information

北戴河:海阔天空

北戴河:海阔天空 北戴河 避暑 北方海边 赶海 观鸟 滑沙 挖螃蟹 挖虾 翡翠岛 露营 沙滩足球 烤大虾 海钓 吃螃蟹 封面... 1 一... 5 二 北戴河旅游最棒体验... 7 1 鸽子窝公园看日出... 7 2 赶海 重温儿时乐趣... 8 3 吃海鲜 烤大虾 蒸螃蟹... 10 4 北戴河 观鸟的麦加... 12 5 单车骑行海岸线 浪漫看风景... 14 6 北戴河集发观光园 做一回道地农民... 16

More information

chp6.ppt

chp6.ppt Java 软 件 设 计 基 础 6. 异 常 处 理 编 程 时 会 遇 到 如 下 三 种 错 误 : 语 法 错 误 (syntax error) 没 有 遵 循 语 言 的 规 则, 出 现 语 法 格 式 上 的 错 误, 可 被 编 译 器 发 现 并 易 于 纠 正 ; 逻 辑 错 误 (logic error) 即 我 们 常 说 的 bug, 意 指 编 写 的 代 码 在 执 行

More information

使用Apache Spark将数据写入ElasticSearch

使用Apache Spark将数据写入ElasticSearch 使用 Apache Spark 将数据写入 ElasticSearch ElasticSearch 是一个基于 Lucene 的搜索服务器 它提供了一个分布式多用户能力的全文搜索引擎, 基于 RESTful web 接口 Elasticsearch 是用 Java 开发的, 并作为 Apache 许可条款下的开放源码发布, 是当前流行的企业级搜索引擎 设计用于云计算中, 能够达到实时搜索, 稳定,

More information

EJB-Programming-3.PDF

EJB-Programming-3.PDF :, JBuilder EJB 2.x CMP EJB Relationships JBuilder EJB Test Client EJB EJB Seminar CMP Entity Beans Value Object Design Pattern J2EE Design Patterns Value Object Value Object Factory J2EE EJB Test Client

More information

OOP with Java 通知 Project 4: 推迟至 4 月 25 日晚 9 点

OOP with Java 通知 Project 4: 推迟至 4 月 25 日晚 9 点 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 推迟至 4 月 25 日晚 9 点 复习 Protected 可以被子类 / 同一包中的类访问, 不能被其他类访问 弱化的 private 同时赋予 package access class MyType { public int i; public double d; public

More information

92 (When) (Where) (What) (Productivity) (Efficiency) () (2) (3) (4) (5) (6) (7) em-plant( SiMPLE++) Scheduling When Where Productivity Efficiency [5]

92 (When) (Where) (What) (Productivity) (Efficiency) () (2) (3) (4) (5) (6) (7) em-plant( SiMPLE++) Scheduling When Where Productivity Efficiency [5] DYNAMIC SCHEDULING IN TWO-MACHINE FLOW-SHOP WITH RECIRCULATION em-plant( SiMPLE++) Jen-Shiang Chen, Jar-Her Kao, Chun-Chieh Chen, Po-Cheng Liu, and Wen-Pin Lin Department of Industrial Engineering and

More information

1 1 大概思路 创建 WebAPI 创建 CrossMainController 并编写 Nuget 安装 microsoft.aspnet.webapi.cors 跨域设置路由 编写 Jquery EasyUI 界面 运行效果 2 创建 WebAPI 创建 WebAPI, 新建 -> 项目 ->

1 1 大概思路 创建 WebAPI 创建 CrossMainController 并编写 Nuget 安装 microsoft.aspnet.webapi.cors 跨域设置路由 编写 Jquery EasyUI 界面 运行效果 2 创建 WebAPI 创建 WebAPI, 新建 -> 项目 -> 目录 1 大概思路... 1 2 创建 WebAPI... 1 3 创建 CrossMainController 并编写... 1 4 Nuget 安装 microsoft.aspnet.webapi.cors... 4 5 跨域设置路由... 4 6 编写 Jquery EasyUI 界面... 5 7 运行效果... 7 8 总结... 7 1 1 大概思路 创建 WebAPI 创建 CrossMainController

More information

使 用 Java 语 言 模 拟 保 险 箱 容 量 门 板 厚 度 箱 体 厚 度 属 性 锁 具 类 型 开 保 险 箱 关 保 险 箱 动 作 存 取 款

使 用 Java 语 言 模 拟 保 险 箱 容 量 门 板 厚 度 箱 体 厚 度 属 性 锁 具 类 型 开 保 险 箱 关 保 险 箱 动 作 存 取 款 JAVA 程 序 设 计 ( 肆 ) 徐 东 / 数 学 系 使 用 Java 语 言 模 拟 保 险 箱 容 量 门 板 厚 度 箱 体 厚 度 属 性 锁 具 类 型 开 保 险 箱 关 保 险 箱 动 作 存 取 款 使 用 Java class 代 表 保 险 箱 public class SaveBox 类 名 类 类 体 实 现 封 装 性 使 用 class SaveBox 代 表 保

More information

www.jobif.com

www.jobif.com 手 机 游 戏 工 作 方 式 : 全 职 发 布 日 期 : 职 业 分 类 : 市 场 / 公 关 招 聘 人 数 : 66 招 聘 地 点 : 北 京 海 淀 学 历 要 求 : 无 要 求 职 位 名 称 : 手 机 游 戏 工 作 经 验 : 无 要 求 职 位 月 薪 : 150 招 聘 联 系 人 : 李 老 师 招 聘 电 话 : 18410197388 网 易 手 机 游 戏 体

More information

建模与图形思考

建模与图形思考 F06_c 观摩 :ContentProvider 基於軟硬整合觀點 架构與 DB 引擎移植方法 ( c) By 高煥堂 4 通用性基类 ContentProvider 基於軟硬整合觀點 的使用范例 刚才的范例里, 我们直接使用 DataPersist 类的接口来与 SQLite 沟通 本节将替 DataPersist 配上 ContentProvider 基类, 让 Client 能透过 ContentProvider

More information

Microsoft Word - 11900電腦軟體設計.doc

Microsoft Word - 11900電腦軟體設計.doc 技 能 檢 定 規 範 之 一 一 九 電 腦 軟 體 行 政 院 勞 工 委 員 會 職 業 訓 練 局 編 印 軟 體 技 術 士 技 能 檢 定 規 範 目 錄 一 軟 體 技 術 士 技 能 檢 定 規 範 說 明... 1 二 丙 級 軟 體 技 術 士 技 能 檢 定 規 範... 3 三 乙 級 軟 體 技 術 士 技 能 檢 定 規 範... 5 四 甲 級 軟 體 技 術 士 技

More information

西岭雪山滑雪场

西岭雪山滑雪场 西南滑雪 雪山 菜鸟滑雪 雪地越野车 草地滑雪 云海 高山草原 雪上飞伞 封面... 1 一 西岭雪山雪场... 3 1 雪场概说... 3 2 雪场设施和服务... 5 3 门票和价格... 9 二 西岭雪山交通... 13 三 装备准备... 15 四 餐饮... 18 五 西岭摄影... 21 六 住在西岭... 24 七 西岭交通... 26 八 西岭气候... 29 九 危险与注意事项...

More information

2/14 Buffer I12, /* x=2, buffer = I 1 2 */ Buffer I243, /* x=34, buffer = I 2 43 */ x=56, buffer = I243 Buffer I243I265 code_int(int x, char *buffer)

2/14 Buffer I12, /* x=2, buffer = I 1 2 */ Buffer I243, /* x=34, buffer = I 2 43 */ x=56, buffer = I243 Buffer I243I265 code_int(int x, char *buffer) 1/14 IBM Rational Test RealTime IBM, 2004 7 01 50% IBM Rational Test RealTime IBM Rational Test RealTime 1. 50% IBM Rational Test RealTime IBM Rational Test RealTime 2. IBM Rational Test RealTime Test

More information

Chapter 9: Objects and Classes

Chapter 9: Objects and Classes Fortran Algol Pascal Modula-2 BCPL C Simula SmallTalk C++ Ada Java C# C Fortran 5.1 message A B 5.2 1 class Vehicle subclass Car object mycar public class Vehicle extends Object{ public int WheelNum

More information

CHAPTER 1

CHAPTER 1 CHAPTER 1 1-1 System Development Life Cycle; SDLC SDLC Waterfall Model Shelly 1995 1. Preliminary Investigation 2. System Analysis 3. System Design 4. System Development 5. System Implementation and Evaluation

More information

untitled

untitled JavaEE+Android - 6 1.5-2 JavaEE web MIS OA ERP BOSS Android Android Google Map office HTML CSS,java Android + SQL Sever JavaWeb JavaScript/AJAX jquery Java Oracle SSH SSH EJB+JBOSS Android + 1. 2. IDE

More information

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 4 月 19 日晚 9 点 复习 Protected 可以被子类 / 同一包中的类访问, 不能被其他类访问 弱化的 private 同时赋予 package access class MyType { public int i; public double d; public char

More information

第 15 章 程 式 編 写 語 言 15.1 程 式 編 写 語 言 的 角 色 程 式 編 寫 語 言 是 程 式 編 寫 員 與 電 腦 溝 通 的 界 面 語 法 是 一 組 規 則 讓 程 式 編 寫 員 將 字 詞 集 合 起 來 電 腦 是 處 理 位 元 和 字 節 的 機 器, 與

第 15 章 程 式 編 写 語 言 15.1 程 式 編 写 語 言 的 角 色 程 式 編 寫 語 言 是 程 式 編 寫 員 與 電 腦 溝 通 的 界 面 語 法 是 一 組 規 則 讓 程 式 編 寫 員 將 字 詞 集 合 起 來 電 腦 是 處 理 位 元 和 字 節 的 機 器, 與 程 式 編 写 語 言 在 完 成 這 章 後, 你 將 能 夠 了 解 程 式 編 写 語 言 的 功 能 了 解 高 階 語 言 和 低 階 語 言 之 間 的 分 別 知 道 翻 譯 程 式 的 意 義 和 能 夠 把 翻 譯 程 式 分 類 為 : 匯 編 程 式 編 譯 程 式 和 解 譯 程 式 認 識 不 同 翻 譯 程 式 的 優 點 和 缺 點 程 式 是 指 揮 電 腦 的 指

More information

1.JasperReport ireport JasperReport ireport JDK JDK JDK JDK ant ant...6

1.JasperReport ireport JasperReport ireport JDK JDK JDK JDK ant ant...6 www.brainysoft.net 1.JasperReport ireport...4 1.1 JasperReport...4 1.2 ireport...4 2....4 2.1 JDK...4 2.1.1 JDK...4 2.1.2 JDK...5 2.1.3 JDK...5 2.2 ant...6 2.2.1 ant...6 2.2.2 ant...6 2.3 JasperReport...7

More information

任務二 : 產生 20 個有炸彈的磚塊, 放在隨機的位置編輯 Block 類別的程式碼 import greenfoot.; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) Write a description of class

任務二 : 產生 20 個有炸彈的磚塊, 放在隨機的位置編輯 Block 類別的程式碼 import greenfoot.; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) Write a description of class 踩地雷遊戲 高慧君南港高中 開啟專案 MineSweep 任務一 : 產生 30X20 個磚塊編輯 Table 類別的程式碼 import greenfoot.; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) import java.util.arraylist; Write a description of class MyWorld

More information

解决百度统计无法获取https来源的referrer

解决百度统计无法获取https来源的referrer 我们都知道, 当我们的页面请求一个 js 文件 一个 cs 文件或者点击到其他页面, 浏览器一般都会给这些请求头加上表示来源的 Referrer 字段 Referrer 在分析用户的来源时非常有用, 比如大家熟悉的百度统计里面就利用到 Referrer 信息了 但是遗憾的是, 目前百度统计仅仅支持来源于 http 页面的 referrer 头信息 ; 也就是说, 如果你网站是 http 的, 那么百度统计只能统计到从其他

More information

Microsoft Word - Learn Objective-C.doc

Microsoft Word - Learn Objective-C.doc Learn Objective C http://cocoadevcentral.com/d/learn_objectivec/ Objective C Objective C Mac C Objective CC C Scott Stevenson [object method]; [object methodwithinput:input]; output = [object methodwithoutput];

More information

Ubuntu和CentOS如何配置SSH使得无密码登陆

Ubuntu和CentOS如何配置SSH使得无密码登陆 Ubuntu 和 CentOS 如何配置 SSH 使得无密码登陆 在使用 Hadoop 的时候, 一般配置 SSH 使得我们可以无密码登录到主机, 下面分别以 Ubuntu 和 CentOS 两个平台来举例说明如何配置 SSH 使得我们可以无密码登录到主机, 当然, 你得先安装好 SSH 服务器, 并开启 ( 关于如何在 Linux 平台下安装好 SSH 请参加本博客的 Linux 平台下安装 SSH

More information

OOP with Java 通知 Project 3: 3 月 29 日晚 9 点 4 月 1 日上课

OOP with Java 通知 Project 3: 3 月 29 日晚 9 点 4 月 1 日上课 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 3: 3 月 29 日晚 9 点 4 月 1 日上课 复习 Java 包 创建包 : package 语句, 包结构与目录结构一致 使用包 : import restaurant/ - people/ - Cook.class - Waiter.class - tools/ - Fork.class

More information

无类继承.key

无类继承.key 无类继承 JavaScript 面向对象的根基 周爱 民 / aimingoo aiming@gmail.com https://aimingoo.github.io https://github.com/aimingoo rand = new Person("Rand McKinnon",... https://docs.oracle.com/cd/e19957-01/816-6408-10/object.htm#1193255

More information

<4D6963726F736F667420576F7264202D20C8EDC9E82DCFC2CEE7CCE22D3039C9CF>

<4D6963726F736F667420576F7264202D20C8EDC9E82DCFC2CEE7CCE22D3039C9CF> 全 国 计 算 机 技 术 与 软 件 专 业 技 术 资 格 ( 水 平 考 试 2009 年 上 半 年 软 件 设 计 师 下 午 试 卷 ( 考 试 时 间 14:00~16:30 共 150 分 钟 请 按 下 述 要 求 正 确 填 写 答 题 纸 1. 在 答 题 纸 的 指 定 位 置 填 写 你 所 在 的 省 自 治 区 直 辖 市 计 划 单 列 市 的 名 称 2. 在 答

More information

什么是函数式编程?

什么是函数式编程? 函数式编程 FUNCTIONAL PROGRAMMING byvoid@byvoid.com 什么是函数式编程? 真相是 从停机问题开始 Bug 假设有停机判定算法 function halting(func, input) { } return if_func_will_halt_on_input; 充分利用停机判定 function ni_ma(func) { if (halting(func,

More information

21 个你应该知道的 wget 命令

21 个你应该知道的 wget 命令 如何下载整个网站用来离线浏览? 怎样将一个网站上的所有 MP3 文件保存到本地的一个目录中? 怎么才能将需要登陆的网页后面的文件下载下来? 怎样构建一个迷你版的 Google? wget 是一个自由的工具, 可在包括 Mac,Window 和 Linux 在内的多个平台上使用, 它可帮助你实现所有上述任务, 而且还有更多的功能 与大多数下载管理器不同的是,wget 可跟着网页上的 HTTP 链接,

More information

( 总 第 1073 期 ) 浙 江 省 人 民 政 府 主 办 2015 年 3 月 17 日 出 版 省 政 府 令 省 政 府 文 件 目 录 浙 江 省 大 型 群 众 性 活 动 安 全 管 理 办 法 ( 浙 江 省 人 民 政 府 令 第 333 号 ) (3) 浙 江 省 人 民 政

( 总 第 1073 期 ) 浙 江 省 人 民 政 府 主 办 2015 年 3 月 17 日 出 版 省 政 府 令 省 政 府 文 件 目 录 浙 江 省 大 型 群 众 性 活 动 安 全 管 理 办 法 ( 浙 江 省 人 民 政 府 令 第 333 号 ) (3) 浙 江 省 人 民 政 ( 总 第 1073 期 ) 浙 江 省 人 民 政 府 主 办 2015 年 3 月 17 日 出 版 省 政 府 令 省 政 府 文 件 目 录 浙 江 省 大 型 群 众 性 活 动 安 全 管 理 办 法 ( 浙 江 省 人 民 政 府 令 第 333 号 ) (3) 浙 江 省 人 民 政 府 关 于 命 名 第 一 批 省 级 生 态 市 第 七 批 省 级 生 态 县 ( 市 区 )

More information

9, : Java 19., [4 ]. 3 Apla2Java Apla PAR,Apla2Java Apla Java.,Apla,,, 1. 1 Apla Apla A[J ] Get elem (set A) A J A B Intersection(set A,set B) A B A B

9, : Java 19., [4 ]. 3 Apla2Java Apla PAR,Apla2Java Apla Java.,Apla,,, 1. 1 Apla Apla A[J ] Get elem (set A) A J A B Intersection(set A,set B) A B A B 25 9 2008 9 M ICROEL ECTRON ICS & COMPU TER Vol. 25 No. 9 September 2008 J ava 1,2, 1,2, 1,2 (1, 330022 ; 2, 330022) :,. Apla - Java,,.. : PAR ;Apla - Java ; ;CMP ; : TP311 : A : 1000-7180 (2008) 09-0018

More information

建模与图形思考

建模与图形思考 C03_c 基 於 軟 硬 整 合 觀 點 JNI: 从 C 调 用 Java 函 数 ( c) By 高 煥 堂 3 How-to: 基 於 軟 硬 整 合 觀 點 从 C 调 用 Java 函 数 如 果 控 制 点 摆 在 本 地 C 层, 就 会 常 常 1. 从 本 地 C 函 数 去 调 用 Java 函 数 ; 2. 从 本 地 C 函 数 去 存 取 Java 层 对 象 的 属 性

More information