将Vector集合转换为dataframe时出现架构错误

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将Vector集合转换为dataframe时出现架构错误相关的知识,希望对你有一定的参考价值。

我有一个名为values的矢量集合,我正在尝试将其转换为数据帧

scala.collection.immutable.Vector[(String, Double)] = Vector((1,1.0), (2,2.4), (3,3.7), (4,5.0), (5,4.9))

我已经定义了一个自定义模式,并尝试进行转换。

val customSchema = new StructType()
    .add("A", IntegerType, true)
    .add("B", DoubleType, true)

val df = values.toDF.schema(customSchema)

这给了我一个错误说,

error: overloaded method value apply with alternatives:
  (fieldIndex: Int)org.apache.spark.sql.types.StructField <and>
  (names: Set[String])org.apache.spark.sql.types.StructType <and>
  (name: String)org.apache.spark.sql.types.StructField
 cannot be applied to (org.apache.spark.sql.types.StructType)

我已经尝试了所有描述herehere以及StructType documentation的方法来创建模式。但是,所有方法都会导致相同的自定义架构customSchema: org.apache.spark.sql.types.StructType = StructType(StructField(A,IntegerType,true), StructField(B,DoubleType,true))

toDF方法在没有自定义模式的情况下工作正常。但是我想强制自定义架构。谁能告诉我这里我做错了什么?

答案

schema是一处房产。当你想获得StructTypeDataFrameDataset时,你应该使用模式。

val df = values.toDF
df.schema
//prints
StructType(StructField(_1,IntegerType,false), StructField(_2,DoubleType,false))

要将矢量转换为DataFrameDataset,您可以使用spark.createDataFramespark.createDataset。这些方法是重载的,他们期望RDDJavaRDDjava.util.ListRow和架构信息。您可以执行以下操作将Vector转换为DataFrame

val df = spark.createDataFrame(vec.toDF.rdd, customSchema)
df.schema
//prints
StructType(StructField(A,IntegerType,true), StructField(B,DoubleType,true))

我希望它有所帮助!

以上是关于将Vector集合转换为dataframe时出现架构错误的主要内容,如果未能解决你的问题,请参考以下文章

将 RDD 转换为 DataFrame 时出现 java.lang.***Error

将 Dataframe 转换为 Vector.dense 以获得 k-mean

尝试将 Dictionary 转换为 DataFrame Pandas 时出现 ValueError

PySpark:将String类型的DataFrame列转换为Double时出现KeyError

如何将 std::vector<std::vector<double>> 转换为 Rcpp::Dataframe 或 Rcpp::NumericMatrix

R语言unlist函数将复杂数据(list列表dataframe字符串String)对象处理成简单向量vector形式:将包含dataframe和字符串的向量列表转换为单个向量(删除数据名称)