Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 如何在Spark Shell中映射三种不同类型的元素?_Scala_Apache Spark - Fatal编程技术网

Scala 如何在Spark Shell中映射三种不同类型的元素?

Scala 如何在Spark Shell中映射三种不同类型的元素?,scala,apache-spark,Scala,Apache Spark,从文本文件创建RDD后,我需要使用.map创建一个[Int,String,String]类型的新RDD…每个元素用逗号分隔。我不明白如何定义一个RDD,每个记录有三种不同的数据类型 到目前为止,我已经: val abc1=sc.textFile(“hi.txt”) val abc2=abc1.map(i=>i.split(,) 如果我正确理解了您的问题,您正在阅读一个文本文件以创建一个RDD[String],其中每个字符串都是文件中的一条记录(行)。但是,这些记录包含一个整数值,后跟两个带逗号

从文本文件创建RDD后,我需要使用.map创建一个[Int,String,String]类型的新RDD…每个元素用逗号分隔。我不明白如何定义一个RDD,每个记录有三种不同的数据类型

到目前为止,我已经:

val abc1=sc.textFile(“hi.txt”)
val abc2=abc1.map(i=>i.split(,)

如果我正确理解了您的问题,您正在阅读一个文本文件以创建一个
RDD[String]
,其中每个字符串都是文件中的一条记录(行)。但是,这些记录包含一个整数值,后跟两个带逗号分隔符的字符串值。(例如,记录可能类似于“5,string1,string2”。)

一个
RDD
实际上只能有一种类型的记录。似乎您希望获得一个类型为
RDD[(Int,String,String)]
——其中
RDD
的类型是
Int
String
String
的元组。(顺便说一句,这是RDD[Tuple3[Int,String,String]]的缩写。如果您不熟悉Scala元组,可能会有所帮助。)

对吗

如果是这样,
map
是一个合适的操作。但是,
.split
操作将返回一个
Array[String]
,因此以下操作将导致
RDD[Array[String]
作为
abc2
的类型。

val abc1=sc.textFile(“hi.txt”)
val abc2=abc1.map(u.split(“,”))
顺便说一句,下划线的使用是以下内容的简写:

val abc1=sc.textFile(“hi.txt”)
val abc2=abc1.map(s=>s.split(“,”))
为了获得所需的类型,应使用如下表达式:

val abc1=sc.textFile(“hi.txt”)
val abc2=abc1.map{s=>
//将字符串拆分为以逗号分隔的标记,将结果放入数组中。
val a=s.split(“,”)
//创建期望值的元组,将第一个值转换为整数。
(a(0).toInt,a(1),a(2))
}
注意,这假设您总是有三个元素,第一个元素是整数。如果不是这样,您将得到错误(并且您可能希望添加更多错误处理)