我有一个csv
文件,其中包含这样的数据
ID|Arr_of_Str
1|["ABC DEF"]
2|["PQR", "ABC DEF"]
我想读取这个.csv
文件,但是当我使用sqlContext.read.load
时,它是作为字符串读取的
当前
:df.printSchema()
root
|-- ID: integer (nullable = true)
|-- Arr_of_Str: string (nullable = true)
预期:
df.printSchema()
root
|-- ID: integer (nullable = true)
|-- Arr_of_Str: array (nullable = true)
|-- element: string (containsNull = true)
如何将字符串转换为字符串数组?
答案 0 :(得分:1)
读取数据时不能这样做,因为CSV不支持复杂的数据结构。加载DataFrame之后,您必须进行转换。
只需从字符串中删除数组方括号并将其拆分即可获得数组列。
from pyspark.sql.functions import split, regexp_replace
df2 = df.withColumn("Arr_of_Str", split(regexp_replace(col("Arr_of_Str"), '[\\[\\]]', ""), ","))
df2.show()
+---+-------------------+
| ID| Arr_of_Str|
+---+-------------------+
| 1| ["ABC DEF"]|
| 2|["PQR", "ABC DEF"]|
+---+-------------------+
df2.printSchema()
root
|-- ID: string (nullable = true)
|-- Arr_of_Str: array (nullable = true)
| |-- element: string (containsNull = true)