簡體   English   中英

如何將 Spark 數據幀輸出轉換為 json?

[英]How to convert Spark dataframe output to json?

我正在使用 Spark SQL 上下文讀取帶有 CSV 文件的文件。

代碼 :

m.put("path", CSV_DIRECTORY+file.getOriginalFilename());
m.put("inferSchema", "true"); // Automatically infer data types else string by default
m.put("header", "true");      // Use first line of all files as header         
m.put("delimiter", ";");

DataFrame df = sqlContext.load("com.databricks.spark.csv",m);              
df.printSchema();

使用df.printSchema()獲取列名和數據類型

開/關:

|--id : integer (nullable = true)
|-- ApplicationNo: string (nullable = true)
|-- Applidate: timestamp(nullable = true)

語句printSchema 的返回類型是什么。 如何將輸出轉換為 JSON 格式,如何將數據幀轉換為 JSON??

所需的 O/P:

{"column":"id","datatype":"integer"}

DataType 有一個 json() 方法和一個 fromJson() 方法,可用於序列化/反序列化模式。

val df = sqlContext.read().....load()
val jsonString:String = df.schema.json()
val schema:StructType = DataType.fromJson(jsonString).asInstanceOf[StructType]

Spark SQL方式,

df.createOrReplaceTempView("<table_name>")
spark.sql("SELECT COLLECT_SET(STRUCT(<field_name>)) AS `` FROM <table_name> LIMIT 1").coalesce(1).write.format("org.apache.spark.sql.json").mode("overwrite").save(<Blob Path1/ ADLS Path1>)

輸出會像,

{"":[{<field_name>:<field_value1>},{<field_name>:<field_value2>}]}

這里可以通過以下 3 行(假設數據中沒有 Tilda)來避免標題,

val jsonToCsvDF=spark.read.format("com.databricks.spark.csv").option("delimiter", "~").load(<Blob Path1/ ADLS Path1>)

jsonToCsvDF.createOrReplaceTempView("json_to_csv")

spark.sql("SELECT SUBSTR(`_c0`,5,length(`_c0`)-5) FROM json_to_csv").coalesce(1).write.option("header",false).mode("overwrite").text(<Blob Path2/ ADLS Path2>)

希望能幫助到你。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM