Iterate Over a tuple

前端 未结 4 1938
囚心锁ツ
囚心锁ツ 2020-12-16 21:49

I need to implement a generic method that takes a tuple and returns a Map Example :

val tuple=((1,2),((\"A\",\"B\"),(\"C\",3)),4)

I have b

相关标签:
4条回答
  • 2020-12-16 22:29

    What about? :

    def flatProduct(t: Product): Iterator[Any] = t.productIterator.flatMap {
      case p: Product => flatProduct(p)
      case x => Iterator(x)
    }
    val tuple = ((1,2),(("A","B"),("C",3)),4)
    flatProduct(tuple).mkString(",") // 1,2,A,B,C,3,4
    

    Ok, the Any-problem remains. At least that´s due to the return type of productIterator.

    0 讨论(0)
  • 2020-12-16 22:30
    tuple.productIterator map { 
       case (a,b) => println(a,b) 
       case (a) => println(a)
    }
    
    0 讨论(0)
  • 2020-12-16 22:34

    This works for me. tranform is a tuple consists of dataframes

    def apply_function(a: DataFrame) = a.write.format("parquet").save("..." + a + ".parquet")
    transform.productIterator.map(_.asInstanceOf[DataFrame]).foreach(a => apply_function(a))
    
    0 讨论(0)
  • 2020-12-16 22:37

    Instead of tuples, use Shapeless data structures like HList. You can have generic processing, and also don't lose type information.

    The only problem is that documentation isn't very comprehensive.

    0 讨论(0)
提交回复
热议问题