我面对的是flatMap的错误,而不是map的错误。flatMap转换不支持布尔操作吗?
scala> val array = Array("age","astro")
array: Array[String] = Array(age, astro)
scala> val baseRdd = sc.parallelize(array)
baseRdd: org.apache.spark.rdd.RDD[String] = ParallelCollectionRDD[0] at parallelize at <console>:29
s
我有一个这样的课程
public class Person {
private String name;
private String age;
private Boolean student;
...
//
getters and setters
}
public class PersonDto {
private List<Person> persons
private Person president
//
getters and setters
}
并从外
我试图找到字数最多的行,我写了以下几行,在spark-shell上运行:
import java.lang.Math
val counts = textFile.map(line => line.split(" ").size).reduce((a, b) => Math.max(a, b))
但是因为,map是一对一的,而flatMap是一对零或任何值。因此,在上面的代码中,我尝试用flatMap替换map。但它给出的错误是:
<console>:24: error: type mismatch;
found : Int
required: Tr
我们有一个Person对象数组,每个对象都有另一个字符串数组,这是可选的。我们想要社会上汽车名字的综合清单。
struct Person {
let name: String
let address: String
let age: Int
let income: Double
let cars: [String]?
}
let personsArray = [Person(name:"Santosh", address: "Pune, India", age:34, income: 100000.0, cars:[
我对Scala还是很陌生的,我读到的其中一件事就是,for-解译在某种程度上等同于flatMap。但是,在我的代码(下面)中,flatMap所花费的时间至少是计算时间的两倍。这是什么原因?
这是最慢的一个:
facts.flatMap(f => factActionsMap(f)).filter(_.isValid(facts))
这是快速等价的一个:
for {
f <- facts
a <- factActionsMap(f)
if a.isValid(facts)
} yield a
factActionsMap是介于Fact和Set[Action]之间的地
诚然,我对Scala非常陌生,而且我在许多Scala示例中看到的语法糖也有问题。它常常导致一个非常简洁的陈述,但诚实地说到目前为止(对我来说)有点难读。
因此,我希望使用选项类的一个典型用法,即安全去引用,作为理解的好地方,例如,在我看到的特定示例中使用下划线。
我找到了一篇非常好的文章,展示了如何使用选项来避免使用null的例子。
他这样描述了一种用法:
trait User {
val child: Option[User]
}
顺便说一句,您也可以将这些函数编写为就地lambda函数,而不是预先定义它们。然后代码变成如下:
val result = UserService.
在普通Scala和flatMap中不同之处在于,flatMap将返回数据的迭代值,这些数据被展平成一个列表。然而,在Akka文档中,map和flatMap似乎做了一些不同的事情?
它说:“通常情况下,这会运行得很好,因为这意味着运行一个快速函数的开销很小。如果函数可能需要大量的时间来处理,那么并发处理可能会更好,为此,我们使用flatMap:”
val f1 = Future {
"Hello" + "World"
}
val f2 = f1 flatMap {x =>
Future(x.length)
}
val result = f2.g
免责声明:这是家庭作业的一部分。我想实现自定义列表对象的flatMap。我已经成功地实现了map,但我在flatMap上遇到了问题。我不知道如何扁平化从map获得的列表列表。我不知道我是否真的应该使用地图。
trait List[+A] {
/** The first element */
def head: A
/** The rest of the elements */
def tail: List[A]
def flatMap[B](f: A => List[B]): List[B]
def map[B](f: A => B): List[B]
我在大学学习scala,我不知道如何使用地图,平面地图和选项。这是我实验室的几个功能。我知道如何先实现,但我不知道如何处理第二个?那么,问题是:如何实现第二个函数而不改变它的签名(使用地图和平面图)?
def testCompose[A, B, C, D](f: A => B)
(g: B => C)
(h: C => D): A => D = h compose g compose f
def testMapFlatMap[A, B, C, D](f: A =
我注意到关于map、flatMap和Future的一些有趣的行为,但我不能理解是什么导致了这种行为
//I have 3 Future objects.
object ConcurrencyExample extends App {
val time = System.currentTimeMillis()
val future1 = Future{println("future1");1}
val future2 = Future{println("future2");2}
val future3 = Future{println(
在听的收藏品讲座时,我看到了这个例子:
scala> val s = "Hello World"
scala> s.flatMap(c => ("." + c)) // prepend each element with a period
res5: String = .H.e.l.l.o. .W.o.r.l.d
然后,我很好奇为什么奥德斯基先生在这里不使用map。但是,当我尝试地图时,我得到了一个与我预期不同的结果。
scala> s.map(c => ("." + c))
res8: scala.collect
我有一个用例,其中我有嵌套的类和一个top类的对象。我想得到一个第N级的值。我反复使用getter来实现这一点,以避免NPE。示例代码(假设有getter)
class A {
String a1;
String getA1() {
return a1;
}
}
class B {
A a;
A getA() {
return a;
}
}
class C {
B b;
B getB() {
return b;
}
}
class D {
C c;
C