2
我有從csv中讀取的數據幀。如何在Spark中將數據幀轉換爲json時打印空值
CSV:
name,age,pets
Alice,23,dog
Bob,30,dog
Charlie,35,
Reading this into a DataFrame called myData:
+-------+---+----+
| name|age|pets|
+-------+---+----+
| Alice| 23| dog|
| Bob| 30| dog|
|Charlie| 35|null|
+-------+---+----+
現在,我想這個數據幀中的每一行轉換爲使用myData.toJSON
一個JSON。我得到的是以下jsons。
{"name":"Alice","age":"23","pets":"dog"}
{"name":"Bob","age":"30","pets":"dog"}
{"name":"Charlie","age":"35"}
我想第三行的json包含空值。防爆。
{"name":"Charlie","age":"35", "pets":null}
但是,這似乎不可能。我通過代碼調試,看到火花的org.apache.spark.sql.catalyst.json.JacksonGenerator
類具有以下實施
private def writeFields(
row: InternalRow, schema: StructType, fieldWriters:
Seq[ValueWriter]): Unit = {
var i = 0
while (i < row.numFields) {
val field = schema(i)
if (!row.isNullAt(i)) {
gen.writeFieldName(field.name)
fieldWriters(i).apply(row, i)
}
i += 1
}
}
這似乎是跳過一列,如果它是空的。我不太清楚爲什麼這是默認行爲,但有沒有辦法在Spark中使用toJSON
打印json中的空值?
我使用星火2.1.0
我不想使用na.fill,因爲它將null放在雙引號內。這與將值設置爲null不同。 – Rahul
@Rahul你可以使用'df.na.fill(null.asInstanceOf [String])',你將得到''pets':'「' – philantrovert
@himanshuIIITian,你的方法也不適用於字符串以外的數據類型。我已經提出了你的答案,但這不是我正在尋找的。 – Rahul