1、 scala可以编写脚本,编写一个.scala的脚本代码,直接用同scala x.scala进行执行。
但同时scala也可以类似java,通过scalac编译为.class等形式,基于编译执行。
2、 scala可以在交互式的命令中直接编码运行。
3、 支持隐式变量定义,通过var关键词定义一个变量,具体变量类型在赋值后,scala自行进行类型推断。例如var a = List(1,2,3)
4、 常量定义用val 关键词定义
5、 没有静态类型,通过object 定义单例类,main方法就是放在object类型中。
Spark 中用 Scala 和 java 开发有什么区别
Scala相对于Java的优势是巨大的。熟悉Scala之后再看Java代码,有种读汇编的感觉…… 如果仅仅是写Spark应用,并非一定要学Scala,可以直接用Spark的Java API或Python API。但因为语言上的差异,用Java开发Spark应用要罗嗦许多。好在带lambda的Java 8出来之后有所改善。 在Spark应用开发上,学Scala主要好处有二: 开发效率更高,代码更精简; 使用Spark过程中出现异常情况,在排查时如果对Spark源码比较熟悉,可以事半功倍
Spark 中用 Scala 和 java 开发有什么区别
Scala相对于Java的优势是巨大的。熟悉Scala之后再看Java代码,有种读汇编的感觉…… 如果仅仅是写Spark应用,并非一定要学Scala,可以直接用Spark的Java API或Python API。但因为语言上的差异,用Java开发Spark应用要罗嗦许多。好在带lambda的Java 8出来之后有所改善。 在Spark应用开发上,学Scala主要好处有二: 开发效率更高,代码更精简; 使用Spark过程中出现异常情况,在排查时如果对Spark源码比较熟悉,可以事半功倍
如何将如下的java代码用scala写
@RunWith(Parameterized.class)
public class MeetingHttpApiTest extends TestBase {
@Test
public void testMeetingHttpApi() {
TedaCaseVo tedaCaseVo = tedaCaseService.getTedaCase(tedaCaseId);
String url = tedaCaseVo.getParamJsonStr();
TedaTool.record(tedaCaseVo, SwordHttp.get(url), tedaCaseService);
}
@Parameters
public static Collection data() {
return Arrays.asList(new Object[][]{{22L}, {23L}, {24L},{25L}, {26L}, {27L}});
}
public MeetingHttpApiTest(Long tedaCaseId) {
this.tedaCaseId = tedaCaseId;
}
protected Long tedaCaseId = 1L;
}
其中,TestBase类:
@SpringApplicationConfiguration(classes = Application.class)
@WebAppConfiguration
public class TestBase {
@Autowired
protected TedaCaseService tedaCaseService;
private TestContextManager testContextManager;
@Before
public void setUpContext() throws Exception {
this.testContextManager = new TestContextManager(getClass());
this.testContextManager.prepareTestInstance(this);
}
}
怎么让scala和java并存
scala的实现方式是将代码翻译为标准的java字节码。scala的特性尽可能地直接映射为相对等的java特性。但scala中的某些特性(如特质)在java中没有,而还有一些特性(如泛型)与java中的不尽相同,对于这些特性,scala代码无法直接映射为java的语法结构,因此它必须结合java现有的特性来进行编码。这些是一般性的原则,现在我们来考虑一些特例:
值类型:类似Int这样的值类型翻译成java有两种不同的方式,只要可能就直接翻译为java的int以获得更好的性能,但有时做不到,就翻译为包装类的对象。
单例对象:scala对单例对象的翻译采用了静态和实例方法相结合的方式。对每一个scala单例对象,编译器都会为这个对象创建一个名称后加美元符号的java类,这个类拥有scala单例对象的所有方法和字段,这个java类同时还有一个名为MODULE$的静态字段,保存该类在运行期创建的一个实例。也就是说,在java中要这样使用scala中的单例对象:单例对象名$.MODULE$.方法名();
特质:编译任何scala特质都会创建一个同名的java接口,这个接口可以作为java类型使用,你可以通过这个类型的变量来调用scala对象的方法。如果特质中还有已经实现的方法,那么还会生成对应的实现类“特质名$class”。
存在类型:
所有java类型在scala中都有对等的概念,这是必要的,以便scala可以访问任何合法的java类。scala中的存在类型实际上主要是用于从scala访问java泛型中的通配类型以及没有给出类型参数的原始类型。存在类型的通用形式如下:
在Scala(和Java)类和类之间的区别是什么
1. 当你说“型”我要去静态类型居多。但我会谈谈动态类型不久。 静态类型是可以静态地证明(“没有运行它”)中的程序的一部分的属性。在静态类型语言中,每个表达式都有一个类型无论你写与否。例如,在CISH“诠释x=A * B +C-D”,A,B,c和d具有类型,A * B有一个类型 CodeGo.net,一个* B +C有一个类型与A * B +C-D都有一个类型。但我们只注明x其中一个类型。在其他语言,比如Scala,C#,Haskell中,SML,和F#,即使这样,也没有必要。 究竟什么样的属性是可证明取决于类型检查。 Scala的样式类,而另一方面,仅仅是规范的一组对象。该规范包括,包括了很多,代表性的细节,例如机构和private领域等在Scala中的类还指定模块的border。 许多语言都有类型,但不具有类和许多语言都有课,但没有(静态)类型。 有类型和类之间的一些细微的差别。列表[字符串]是一种类型,但不是一类。在Scala中列出的是类,但通常不是一个类型(它实际上是一个更高的kinded型)。在C#中列出的是不是一个类型的任何一种,并在Java中这是一个“原始类型”。 Scala提供结构类型。 {foo的高清:pubs}指可证明有一个返回pubs,不分阶级的任何对象。它是一个类型,但不是一个类。 类型可以是类型当你写DEF为foo [T](X:T)=...,那么foo的体内T是一个类型。但T是不是一类。 类型可以是虚拟的scala(即“抽象类,但是,今天(不能是虚拟与scala虽然有一个样板沉重的方式来虚拟类编码 现在,动态类型。动态类型对象执行某些操作之前,会自动检查的性质。在动态类型的基于类的OO语言有类型和类之间有很强的相关性。事情发生在JVM语言比如Scala和Java具有只可以动态地检查,如反射和投射操作。在这些语言中,“类型擦除”更多的还是大多数对象的动态类型是因为他们的阶级。更多或更少。这不是真正的,例如,它们通常不被擦除,使之可以告诉数组[INT]和数组[字符串]之间的区别数组。但我的宽泛定义的“动态类型对象的自动检查的性质。”当反射也能够发送到的对象。如果对象支持则一切正常了。是有意义的谈话,可以嘎嘎如鱼得水作为一个动态类型的所有对象,即使它不是一个类。这是一个什么样的Python和调用的本质“鸭打字。”此外,通过我的宽泛定义,甚至“zeroness”是一个动态的类型在某种意义上说,在大多数语言中,会自动检查号码,以确保你不被零除。有一个非常,非常少的语言,可以证明,静态地使零(或不为零)的静态类型。 最后,其他的也有类型,例如int不具有一个类作为一个细节,类型,如Null和任何这是一个有点特殊,但可能有类和不和类型,如没有它甚至没有任何值更何况是一个类。
2. 好吧,我会咬...有一个很好的答案,所以我要去尝试不同的技巧和提供一个更下降到地球的观点。 广义地说,一类是可被实例化。单例对象(scala)性状(scala)和接口(scala)被认为是类。这是有道理的,因为单身仍然实例化(代码)和一个接口可以被实例化一个子类的一部分。 其中第二点.class是设计在大多数面向对象语言的基本单位(虽然不是基于原型的,如JavaScript)的。多态性与子类在类术语界定.class还提供了一个和可见性控制。 类型是一个非常不同的野兽,该系统能够表达每一个可能的值将具有一种或多种类型,并且这些可以等同于类,例如:(Int) => String // both the type and class are Function1[Int,String]
"hello world" // class and type are String
您还可以得到scala和Java之间有趣差异:7 // both the class and type are Int in Scala
// in Java there's no class and the type is Integer.TYPE
println("hello world") // the return type is Unit, of class Unit
// Java has void as a type, but no corresponding class
error("oops") // the type and class are both "Nothing"
而真正有趣的类型不属于类的。例如,this.type始终指的unique类型this。这是唯一的一个实例,是不是与类的其他实例。 也有抽象类型和类型,例如:type A // 'A' is an undetermined abstract type
// to be made concrete in a subclass
class Seq[T] { ... } // T is a type, but not a class
Seq有趣的是,因为它是一个类,而不是一个类型。更准确地说,它是一个“类的构造函数”,这将构建一个有效的类型时,提供必要的类型提供的类型构造器的另一个术语是“高kinded类型”,我个人不喜欢这个词,因为“型构造”思在供应类型像任何其他表单的条款-模型,有良好的scala。 “高kinded”正确地暗示Seq有一个“种”,这是* => *,这个符号指出,Seq将采取单一的类型和产生一个单一的类型(这类似于用于描述函数柯里表示法)。通过这样的一种Map是* => * => *它需要两个类型
3. A型可通过本身,没有任何实例.a个例子这就是所谓的“幽灵式”。下面是Java的一个例子: 在这个例子中,我们有public static class Initializer<HA, HB>,其中HA和HB取类型(由抽象类代表TRUE和FALSE),而没有beeing实例化。 我希望这表明,类型和类是不同的,并且类型可以通过本身。
4. (仅限于Java),我会说,一类是一组对象。对象o是类型X如果o是集X.class型X是的子类型Y,如果设置X的一个子集Y。 对于每一个C类(不是接口)有一组对象,从创建new C(...)。有趣的是,我们很少在乎这一套。 (但每一个对象不属于一组这样的事实,这可能 对于每一个C类,有一种类型t(C)一般方称为“C型”,这是一组可从被创建的所有对象的new S(...)其中,S是C或C的子类 类似地,对于每一个接口I,有一种类型的t(I),“I型”,这是一组可从被创建的所有对象的new S(...)其中S一 如果类S是的一个子类C,S型是C型的类似接口的子类型I有一个空值类型,它是空集。 NULL类型是每个类型的子类型。 有一组中的所有对象,这是Object类型。这是一个超类型每一种类型的。 到目前为止,这种表单主义是A型基本上是在一个类或接口,以及亚型的关系基本上是子类/子关系。在平凡是一件好事,语言是可以理解的!但进入仿制药,有型,而像类型的并,交运算.class型不再只类和接口,以及亚型关系更丰富,更难理解。
Spark 中用 Scala 和 java 开发有什么区别
1,构建系统的选择,sbt更合适用来构建Scala工程,maven更合适用来构建Java工程
2,对于spark中的API来说,Java和Scala有差别,但差别并不大
3,如果用Scala开发spark原型程序,可以用spark-shell“打草稿”,或者直接使用spark-shell做交互式实时查询
4,用Scala代码量将减少甚至一个数量级,不过Scala的使用门槛较高
建议:使用Scala构建spark作业,因为spark本身为sbt所构建,同时使用Scala开发spark作业将有助于理解spark的实现机制
Scala相对Java语法更丰富,更简洁,写起来更像脚本,能够提高开发效率。
使用Java的话代码会规范些,不过太臃肿,代码量更大。
另外Spark基本使用函数式编程,使用Java的话可能需要写一大堆匿名类,而Scala只需要一个lambda表达式。
Java不支持自动类型推导,RDD类基本都是范型,声明时需要写一串类类型,而Scala基本可以省略变量类型。
另外,如果喜欢,可以混合Java和Scala,因为二者最终都是编译成class文件,使用Scala能够随意调用Java实现的类和方法。
从表面上看,无论采用哪种语言,都能完成一样的功能,只是代码量有多有少,开发人员根据自己的情况选择使用Java还是Scala都可。
据说目前最新的Java 8已经支持函数式接口了,Java 9也将推出Java Shell功能,慢慢地会变得和Scala一样简洁
使用Scala是不是可以直接使用JAVA的类库
当然可以。
Java库、框架和开发工具都可用。构建工具Ant/Maven,开发工具Eclipse、IntelliJ、Netbeans,框架如Spring、Hibernate都可以和Scala一起使用。
Scala可以运行在JVM,Android上。
Scala社区是Java生态系统的一个重要部分。流行的scala框架如Akka、Finagle和Play 都有Scala/Java两套API。
转载请注明出处51数据库 » 用scala和java写wordcoun Scala和java比较
你让我瞌睡