Spark 未完全读取 AVRO 文件

AVRO file not read fully by Spark

我正在使用 Spark 读取存储在 ADLS gen2 上的 AVRO 文件,如下所示:

import dbutils as dbutils
from pyspark.conf import SparkConf
from pyspark.sql import SparkSession

file="abfss://eventhub_user@mydatalake.dfs.core.windows.net/xyz-event-collection/my-events/27/2021/11/01/01/01/01.avro"
key="..........."
appName = "MyEventsReadTest"
master = "local[*]"
sparkConf=SparkConf() \
    .setAppName(appName) \
    .setMaster(master) \
    .set("fs.azure.account.key.dechitraguptdatalake.dfs.core.windows.net", key)

spark=SparkSession.builder.config(conf=sparkConf).getOrCreate()
df=spark.read.format("avro").load(file)
df.show()

我按如下方式提交此 readEventsFromADLS2.py 文件:

spark-submit --packages org.apache.spark:spark-avro_2.12:2.4.8 --jars hadoop-azure-3.3.1.jar  ./readEventsFromADLS2.py

但是,结果我只得到缩短的输出。

21/11/15 13:21:03 INFO CodeGenerator: Code generated in 13.582867 ms
+--------------+--------+--------------------+--------------------+----------+--------------------+
|SequenceNumber|  Offset|     EnqueuedTimeUtc|    SystemProperties|Properties|                Body|
+--------------+--------+--------------------+--------------------+----------+--------------------+
|         31411|21976208|11/10/2021 12:11:...|{x-opt-enqueued-t...|        {}|[7B 22 70 61 79 6...|
|         31412|21977032|11/10/2021 12:11:...|{x-opt-enqueued-t...|        {}|[7B 22 70 61 79 6...|
|         31413|21977736|11/10/2021 12:12:...|{x-opt-enqueued-t...|        {}|[7B 22 70 61 79 6...|
|         31414|21977800|11/10/2021 12:12:...|{x-opt-enqueued-t...|        {}|[7B 22 70 61 79 6...|
|         31415|21978336|11/10/2021 12:12:...|{x-opt-enqueued-t...|        {}|[7B 22 70 61 79 6...|
|         31416|21978872|11/10/2021 12:12:...|{x-opt-enqueued-t...|        {}|[7B 22 70 61 79 6...|
|         31417|21979632|11/10/2021 12:12:...|{x-opt-enqueued-t...|        {}|[7B 22 70 61 79 6...|
+--------------+--------+--------------------+--------------------+----------+--------------------+

21/11/15 13:21:03 INFO SparkContext: Invoking stop() from shutdown hook

问题:

  1. 如何在上面的输出中打印完全展开的列?
  2. 如何以文本格式查看 Body 部分(以上输出中的最后一列)? Body 实际上是一个 JSON,但在这里作为字节数组出现。

当我将 df.show() 更改为 df.show(10,False) 时,我仍然得到 Body 字段的二进制字节数组表示形式:

|31411 |21976208|11/10/2021 12:11:46 PM|{x-opt-enqueued-time -> {1636546306366, null, null, null}}|{} |[7B 22 70 61 79 6C 6F 61 64 22 3A....]

要完整显示您可以使用的所有列:

df.select("body").show(false)

如果数据确实是 JSON 而您希望它读取的是 JSON,consider specifying the schema 而不是让 Spark 为您解释它。