我有一个带有值元组(String,SparseVector)的RDD,我想使用RDD创建一个DataFrame。获取 (label:string, features:vector) DataFrame,它是大多数 ml 算法库所需的 Schema。我知道可以这样做,因为 HashingTF ml 库在给定DataFrame的特征列时会输出一个向量。
temp_df = sqlContext.createDataFrame(temp_rdd, StructType([
StructField("label", DoubleType(), False),
StructField("tokens", ArrayType(StringType()), False)
]))
#assumming there is an RDD (double,array(strings))
hashingTF = HashingTF(numFeatures=COMBINATIONS, inputCol="tokens", outputCol="features")
ndf = hashingTF.transform(temp_df)
ndf.printSchema()
#outputs
#root
#|-- label: double (nullable = false)
#|-- tokens: array (nullable = false)
#| |-- element: string (containsNull = true)
#|-- features: vector (nullable = true)
所以我的问题是,我能否以某种方式让(String,SparseVector)的RDD将其转换为(String,vector)的DataFrame。我尝试了通常的sqlContext.createDataFrame
方法,但没有适合我需要的DataType 。
df = sqlContext.createDataFrame(rdd,StructType([
StructField("label" , StringType(),True),
StructField("features" , ?Type(),True)
]))