从CSV读取字符串数组作为Pyspark中的数组

时间:2019-12-12 10:57:29

标签: apache-spark pyspark pyspark-dataframes

我有一个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)

如何将字符串转换为字符串数组?

1 个答案:

答案 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)