Tag: scala

如何将rdd对象转换为spark中的dataframe

如何将RDD( org.apache.spark.rdd.RDD[org.apache.spark.sql.Row] )转换为Dataframe org.apache.spark.sql.DataFrame 。 我使用.rdd将dataframe转换为rdd。 处理完之后,我希望它回到数据框中。 我怎样才能做到这一点 ?

性能和Java互操作性:Clojure与Scala

我已经阅读了Clojure和Scala的各种账户,虽然我意识到两者都有自己的位置。 在Clojure和Scala的比较中,我还没有得到一个完整的解释: 1.)这两种语言中的哪一种通常比较快 ? 我意识到,这将从一个语言function到另一个不同,但一般性能的评估将是有帮助的。 例如:我知道Python字典真的很快。 但总的来说,这是一个比Java慢得多的语言。 我不想和Clojure一起去,在这条路上遇到这个问题。 2.)与Java的互操作性如何? 我目前阅读的所有内容都是Scala具有本地集合types,这使得它与一个大的Java代码库集成起来有些笨拙,而Clojure遵循一个简单的以Iterable / Iterator为中心的方式来与Java类进行交互操作。 任何更多的想法/细节呢? 最终,如果clojure和scala之间的距离足够近,我可以尝试两者。 有一点关于Clojure语言看起来很简单。 但是再一次,Scala有一个非常灵活的types系统。 但是,我知道Scala很快(基于多个个人帐户)。 所以,如果Clojure慢得多,我想早点知道。

隐式转换与types类

在Scala中,我们可以使用至less两种方法来改造现有的或新的types。 假设我们想expression一些东西可以用Int来量化。 我们可以定义以下特征。 隐式转换 trait Quantifiable{ def quantify: Int } 然后我们可以使用隐式转换来量化string和列表。 implicit def string2quant(s: String) = new Quantifiable{ def quantify = s.size } implicit def list2quantifiable[A](l: List[A]) = new Quantifiable{ val quantify = l.size } 导入这些后,我们可以调用string和列表的方法quantify 。 请注意,可量化列表存储其长度,所以它避免了在后续调用中进行昂贵的遍历。 types类 另一种方法是定义一个“证人” Quantified[A] ,说A型可以量化。 trait Quantified[A] { def quantify(a: A): Int } 然后我们为String和List提供这个类的实例。 implicit val stringQuantifiable = […]

重载Scala的Case Classes的构造函数?

在斯卡拉2.8是否有一种方法来重载一个case类的构造函数? 如果是的话,请把一个片段解释一下,如果没有,请解释为什么?

将InputStream转换为Scala中的string的习惯性方法

我有一个方便的函数,我已经在Java中用于将InputStream转换为string。 这里是对Scala的直接翻译: def inputStreamToString(is: InputStream) = { val rd: BufferedReader = new BufferedReader(new InputStreamReader(is, "UTF-8")) val builder = new StringBuilder() try { var line = rd.readLine while (line != null) { builder.append(line + "\n") line = rd.readLine } } finally { rd.close } builder.toString } 有没有一个惯用的方式来做到这一点在斯卡拉?

在Scala中有伴侣对象的基本原理是什么?

有没有一个类的伴侣对象(单身人士)的情况下需要? 为什么我要创build一个类,说Foo并为它创build一个伴侣对象?

Scala向下或减less循环?

在Scala中,您经常使用迭代器以递增顺序执行for循环,如下所示: for(i <- 1 to 10){ code } 你怎么做,所以从10到1? 我猜10 to 1给出一个空的迭代器(像平常的math范围)? 我做了一个Scala脚本,通过在迭代器上调用reverse来解决这个问题,但是我认为这不是很好,下面的路要走吗? def nBeers(n:Int) = n match { case 0 => ("No more bottles of beer on the wall, no more bottles of beer." + "\nGo to the store and buy some more, " + "99 bottles of beer on the wall.\n") case _ […]

函数式编程 – 不变性昂贵?

问题分两部分。 首先是概念。 接下来在Scala中更具体地看待同一个问题。 在编程语言中只使用不可变的数据结构是否使实现某些algorithm/逻辑本质上在计算上更加昂贵? 这引出了一个事实,即不变性是纯粹function性语言的核心原则。 还有其他因素会影响到这一点吗? 我们来举一个更具体的例子。 通常在内存数据结构中使用可变操作来教授和实现快速sorting。 如何以PUREfunction的方式实现这样的事情,并且可变计算和存储开销相当于可变版本。 具体在斯卡拉。 下面列出了一些粗略的基准。 更多细节: 我来自命令式编程背景(C ++,Java)。 我一直在探索函数式编程,特别是Scala。 纯函数式编程的一些主要原则: 职能是一等公民。 函数没有副作用,因此对象/数据结构是不可变的 。 尽pipe现代的JVM对于创build对象非常有效,而且垃圾收集对于短期对象来说是非常便宜的,但是最小化对象创build的权利可能更好一些? 至less在并发和locking不是问题的单线程应用程序中。 由于Scala是一个混合模式,如果有必要,可以select使用可变对象编写命令代码。 但是,作为一个花了很多年的人试图重用对象,并尽量减less分配。 我想对这个甚至不允许的思想学派有一个很好的理解。 作为一个具体的例子,我对本教程中的这段代码感到有点惊讶。 它有一个Java版本的Quicksort,后面跟着一个整齐的Scala实现。 这是我尝试对实现进行基准testing。 我没有做详细的分析。 但是,我的猜测是Scala版本比较慢,因为分配的对象数量是线性的(每个recursion调用一个)。 有什么方法可以使尾部优化成为可能? 如果我是对的,Scala支持自回归调用的尾调用优化。 所以,它应该只是在帮助它。 我正在使用Scala 2.8。 Java版本 public class QuickSortJ { public static void sort(int[] xs) { sort(xs, 0, xs.length -1 ); } static void sort(int[] xs, […]

如何从标准input逐行读取?

从标准input中逐行读取Scala的配方是什么? 像相当于Java代码的东西: import java.util.Scanner; public class ScannerTest { public static void main(String args[]) { Scanner sc = new Scanner(System.in); while(sc.hasNext()){ System.out.println(sc.nextLine()); } } }

Build.scala,%和%%符号的含义

我是新玩的! Framework 2.1(Java版本),并没有与Scala的经验。 我不明白在Build.scala中%和%%意思是什么和什么。 我search了他们,但找不到他们的意思。 在我的Build.scala文件中,我有: "org.hibernate" % "hibernate-entitymanager" % "4.1.0.Final", "com.typesafe" %% "play-plugins-mailer" % "2.1" 为什么第一行使用单个%符号,第二行使用两个百分号%% ? 他们是为了什么?