将带有字符串列的spark数据帧转换为StructType列

时间:2020-01-26 07:55:13

标签: apache-spark pyspark apache-spark-sql

我有一个CSV文件,其标题为“邮件”,行为

{"a":1,"b":"hello 1","c":"1234"}
{"a":2,"b":"hello 2","c":"2345"}

我想将它们转换为不同的列a,b,c。 我尝试了以下代码:

df1 = spark.read.format("csv").option("header","true")
      .option("delimiter","^")
      .option("inferSchema","false")
      .load("testing.csv")

但是它将其作为string列。

df1.printScema() --> String

1 个答案:

答案 0 :(得分:0)

您的文件为json格式,第一行为“ message”。
在使用Spark的"DROPMALFORMED"

进行读取时,可以使用选项DataFrameReader忽略第一行
file : json-test.txt

message
{"a":1,"b":"hello 1","c":"1234"}
{"a":2,"b":"hello 2","c":"2345"}

通过忽略不良记录[初始记录]来读取json文件:

val jsondf = spark.read
                  .option("multiLine", false)
                  .option("mode", "DROPMALFORMED")
                  .json("files/file-reader-test/json-test.txt")
jsondf.show()

输出:

+---+-------+----+
|  a|      b|   c|
+---+-------+----+
|  1|hello 1|1234|
|  2|hello 2|2345|
+---+-------+----+

模式:

jsondf.printSchema()

root
 |-- a: long (nullable = true)
 |-- b: string (nullable = true)
 |-- c: string (nullable = true)