Ich habe eine RDD mit einem Tupel von Werten (String, sparsevector) und ich möchte ein Dataframe mit dem RDD erstellen. Um ein (label: string, features: vector) zu erhalten, ist DataFrame das Schema, das von den meisten Bibliotheken des ml-Algorithmus benötigt wird. Ich weiß, dass es getan werden kann, weil HashingTF ml Bibliothek einen Vektor ausgibt, wenn eine Feature-Spalte eines DataFrame gegeben wird.Wie konvertiere ich eine RDD mit einer sparsevector Spalte zu einem Datenrahmen mit einer Spalte als Vektor
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)
Also meine Frage ist, kann ich irgendwie ein RDD von (String, sparsevector) mit wandelt es in einen Dataframe von (String, Vektor). Ich versuchte es mit dem üblichen sqlContext.createDataFrame
, aber es gibt keine DataType, die die Bedürfnisse ich habe.
df = sqlContext.createDataFrame(rdd,StructType([
StructField("label" , StringType(),True),
StructField("features" , ?Type(),True)
]))
Wow, ich habe das im Laufe der Jahre gesucht! fast weinen vor Glück:,) +1 –
Das hat funktioniert! vielen Dank! kannst du mir sagen wo in der Dokumentation das ist? kann keine VectorUDT auf linalg Apache Funken Docs –
@OrangelMarquez vielleicht eine Pull-Anfrage erforderlich ist –