假设我有一个看起来像这样的DataFrame df
:
+--------------------+
| features|
+--------------------+
|[9.409448, 0.0, 0.3]|
|[9.055118, 2.0, 0.3]|
|[9.055118, 2.9, 0.2]|
+--------------------+
它有1列称为“功能”,是浮点数数组。
我如何将其写到如下所示的csv文件中?
9.409448, 0.0, 0.3
9.055118, 2.0, 0.3
9.055118, 2.9, 0.2
我尝试过的事情:
想法:也许以某种方式将其转换为矩阵?我不确定该怎么做。
答案 0 :(得分:1)
假设您的架构类似于:
df.printSchema()
#root
# |-- features: array (nullable = true)
# | |-- element: double (containsNull = true)
一个想法是将浮点数数组转换为字符串数组。然后,您可以调用pyspark.sql.functions.concat_ws
将数组内部的元素(现在为字符串)提取为一个字符串。
例如,使用", "
作为分隔符:
import pyspark.sql.functions as f
df = df.select(
f.concat_ws(", ", f.col("features").cast("array<string>")).alias("features")
)
df.show(truncate=False)
#+------------------+
#|features |
#+------------------+
#|9.409448, 0.0, 0.3|
#|9.055118, 2.0, 0.3|
#|9.055118, 2.9, 0.2|
#+------------------+
从模式中可以看到,features
列中现在只有一个字符串:
df.printSchema()
#root
# |-- features: string (nullable = false)
更新
使用pyspark.sql.DataFrameWriter.csv
写入csv时,如果分隔符作为值的一部分出现,则默认行为是引用值。要关闭引号,请在写入文件时将quote
选项设置为空字符串。