将rdd[string]转换为rdd[myclass]

kpbwa7wx  于 2021-05-17  发布在  Spark
关注(0)|答案(2)|浏览(610)

我正在尝试将rdd[string]转换为rdd[picture],但无法完成。如果我能将rdd转换成rdd[picture],我将使用def hasvalidcountry检查picture的纬度和经度值是否有效。之后,我将尝试检查用户标记是否与picture类中的def hastags有效。我遇到的问题是:
找到隐式转换:行⇒ augmentstring(行):scala.collection.immutable.stringops
类型不匹配;找到:需要字符串:数组[string]
value interestingpics不是数组的成员[nothing]可能的原因:“value interestingpics”之前可能缺少分号?
我的目的是选择具有有效国家和标签的行,并将所有行转换为新的rdd[picture]类。
scalafile1(我已经更新了scalafile):

object Part2 {
      def main(args: Array[String]): Unit = {
        var spark: SparkSession = null
        try {
          spark = SparkSession.builder().appName("Flickr using dataframes").config("spark.master", "local[*]").getOrCreate()
          val originalFlickrMeta: RDD[String] = spark.sparkContext.textFile("flickrSample.txt")        

      val InterestingPics = originalFlickrMeta.map(row => row.split('\t')).map(field => Picture(field(0).toString())
      InterestingPics.collect
      InterestingPics.take(5).foreach(println)
r3i60tvu

r3i60tvu1#

举例来说,这是可行的:

case class case_for_rdd(c1: Int, c2: String, c3: String)

val rdd_data = spark.sparkContext.textFile("/FileStore/tables/csv01-4.txt")
val rdd = rdd_data.map(row => row.split(',')).map(field => case_for_rdd(field(0).toInt, field(1), field(2)))
rdd.collect

更复杂的例子是从带有数组的文件读入rdd。数组需要分隔符。

1,10,100,aa|bb|cc
2,20,200,xxxxxx|yyyyyyyy|z|aaa

一些示例代码,但使用列表,否则您会看到 array addresses ,这就是那些奇怪的弦,这里聪明人的礼遇:

case class case_for_rdd(c1: Int, c2: String, c3: String, a4: List[String])  
val rdd_data = spark.sparkContext.textFile("/FileStore/tables/csv03.txt")
val myCaseRdd = rdd_data.map(row => row.split(',')).map(field => case_for_rdd(field(0).toInt, field(1), field(2), (field(3).split("\\|").toList)))
myCaseRdd.collect

我的建议是使用df和分裂的东西,然后更容易。还有,操纵 rdd 通过转换,然后 case class 他迷路了。带有df api的数组没有这样的问题。

weylhg0b

weylhg0b2#

在“蓝色幻影”的帮助下,我有了一个解决问题的办法。非常感谢你。

val InterestingPics = originalFlickrMeta.map(line => (new Picture(line.split("\t")))).filter(f => f.c != null && f.userTags.length > 0)
      InterestingPics.collect().foreach(println)

相关问题