我想从可以匹配现有模式的字符串列表中创建一个 DataFrame。
这是我的代码。
val rowValues = List("ann", "f", "90", "world", "23456") // fails
val rowValueTuple = ("ann", "f", "90", "world", "23456") //works
val newRow = sqlContext.sparkContext.parallelize(Seq(rowValueTuple)).toDF(df.columns: _*)
val newdf = df.unionAll(newRow).show()
如果我使用字符串列表,则相同的代码将失败。我看到不同之处在于
rowValueTuple
创建了一个 Tuple
。由于
rowValues
列表的大小动态变化,我无法手动创建 Tuple*
对象。我怎样才能做到这一点?我错过了什么?我怎样才能展平这个列表以满足要求?
感谢您的帮助,拜托。
最佳答案
DataFrame 具有固定列数的架构,因此为每个可变长度列表创建行似乎并不自然。无论如何,您可以使用现有架构从 RDD[Row] 创建您的 DataFrame,如下所示:
val rdd = sqlContext.sparkContext.parallelize(Seq(rowValues))
val rowRdd = rdd.map(v => Row(v: _*))
val newRow = sqlContext.createDataFrame(rdd, df.schema)
关于斯卡拉 Spark : How to create a RDD from a list of string and convert to DataFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36769169/