如何使用spark createData Frame从List/seq集合创建DataFrame。

问题描述 投票:-1回答:1
#1 val tupleData = List(("Java", "20000"), ("Python", "100000"), ("Scala", "3000"))
    sc.createDataFrame(tupleData).toDF("col1","col2") // perfectly fine 
#2    val intData = List(1,2,3)   
   sc.createDataFrame(intData).toDF("col1") // this line causing compile time issue

对#2有疑问。为什么不能为List[Int]创建DataFrame。在#1中,我创建了一个图元组列表,并且能够使用createDataFrame选项创建DF。这个方法在Product类型中是可以接受的。为什么它不接受#2。

scala apache-spark apache-spark-sql
1个回答
1
投票
def createDataFrame[A <: Product : TypeTag](data: Seq[A]): DataFrame = {}

如果你看到上面的createDataFrame函数只取Product或TypeTag的子类型。

#1 val tupleData = List(("Java", "20000"), ("Python", "100000"), ("Scala", "3000"))
    sc.createDataFrame(tupleData).toDF("col1","col2") // perfectly fine 

Tuple2是Product特性的子类型,这就是为什么它接受List of tuple2来创建数据帧。

#2    val intData = List(1,2,3)   
      sc.createDataFrame(intData).toDF("col1")

在这个函数中,你传递的是Int &amp类型的List;Int不是Product或TypeTag的子类型。


1
投票

你可以转换你的 Int的到一个 Tuple1 :

createDataFrame(List(1,2,3).map(Tuple1.apply)).toDF("col")
© www.soinside.com 2019 - 2024. All rights reserved.