Muszę dodać nową kolumnę Spark DF MapType w oparciu o istniejące kolumny, w których nazwa kolumny jest kluczem, a wartość jest wartością.pyspark: Utwórz kolumnę MapType z istniejących kolumn
Jako przykład - Mam ten DF:
rdd = sc.parallelize([('123k', 1.3, 6.3, 7.6),
('d23d', 1.5, 2.0, 2.2),
('as3d', 2.2, 4.3, 9.0)
])
schema = StructType([StructField('key', StringType(), True),
StructField('metric1', FloatType(), True),
StructField('metric2', FloatType(), True),
StructField('metric3', FloatType(), True)])
df = sqlContext.createDataFrame(rdd, schema)
+----+-------+-------+-------+
| key|metric1|metric2|metric3|
+----+-------+-------+-------+
|123k| 1.3| 6.3| 7.6|
|d23d| 1.5| 2.0| 2.2|
|as3d| 2.2| 4.3| 9.0|
+----+-------+-------+-------+
jestem już tak daleko, że można stworzyć structType z tego:
nameCol = struct([name for name in df.columns if ("metric" in name)]).alias("metric")
df2 = df.select("key", nameCol)
+----+-------------+
| key| metric|
+----+-------------+
|123k|[1.3,6.3,7.6]|
|d23d|[1.5,2.0,2.2]|
|as3d|[2.2,4.3,9.0]|
+----+-------------+
Ale to, co jest mi potrzebne kolumna metryczny z am MapType, gdzie klucz jest nazwą kolumny:
+----+-------------------------+
| key| metric|
+----+-------------------------+
|123k|Map(metric1 -> 1.3, me...|
|d23d|Map(metric1 -> 1.5, me...|
|as3d|Map(metric1 -> 2.2, me...|
+----+-------------------------+
Jakieś wskazówki, w jaki sposób mogę przekształcić dane?
Dzięki!
wasze rozwiązania ładnie wygląda, to może być wykorzystane aby odpowiedzieć: https://stackoverflow.com/questions/45445077/pyspark-spark-dataframe-aggregate-columns-in-map-type? –