Обратите внимание, что вы читаете файл как текстовый файл и конвертируете его в json.По умолчанию символ новой строки будет разделителем для текстовых файлов, а в строке, если у вас есть допустимая строка JSON, он будет правильно преобразован в схему, определенную вами в методе from_json ().
Если есть пустые строкиили неверный текст JSON, тогда вы получите NULL.
Проверьте это:
val df = spark.read.text("in/testFile.txt")
println("Default show()")
df.show(false)
println("Using the from_json method ")
df.select(from_json(col("value"),
StructType(List(
StructField("a",IntegerType),
StructField("b",IntegerType)
))
)).show(false)
, когда in / testFile.txt имеет содержимое ниже,
{"a": 1, "b": 2 }
печатает
Default show()
+-----------------+
|value |
+-----------------+
|{"a": 1, "b": 2 }|
+-----------------+
Using the from_json method
+--------------------+
|jsontostructs(value)|
+--------------------+
|[1,2] |
+--------------------+
когда вы вводите пустую строку
{"a": 1, "b": 2 }
// Blank line
результат равен
Default show()
+-----------------+
|value |
+-----------------+
|{"a": 1, "b": 2 }|
| |
+-----------------+
Using the from_json method
+--------------------+
|jsontostructs(value)|
+--------------------+
|[1,2] |
|null |
+--------------------+