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
问题:
- 如何在上面的输出中打印完全展开的列?
- 如何以文本格式查看
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 为您解释它。
我正在使用 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
问题:
- 如何在上面的输出中打印完全展开的列?
- 如何以文本格式查看
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 为您解释它。