我是PySpark的新手,长话短说:我有一个镶木地板文件,我正在尝试阅读它并将其与SPARKSQL一起使用,但目前我可以:
我有一个镶木地板文件“位置.镶木地板”和
location_schema = StructType([
StructField("loc_id", IntegerType()),
StructField("descr", StringType())
])
我一直在尝试阅读镶木地板文件:
location_df = spark.read.format('parquet') \
.options(header='false') \
.schema(location_schema) \
.load("data/locations.parquet")
然后我将所有内容放入Temp表中以运行查询:
location_df .registerTempTable("location")
但是在尝试运行查询后:
query = spark.sql("select * from location")
query.show(100)
它给我NULL值:
parque文件是正确的,因为我已经成功运行了这个:
great = pd.read_parquet('data/locations.parquet', engine='auto')
但是read_parquet的问题(从我的理解)是我不能像spark.read. format那样设置模式。如果我在csv中使用spark.read.format,它也能成功运行并带来数据。
任何建议都非常感谢,谢谢。
location_df. schema
给了我:结构类型(列表(结构字段(862,长类型,真),结构字段(动画,字符串类型,真))
您有一个带有数组的结构,而不仅仅是两列。这解释了为什么您的第一个示例为空(名称/类型不匹配)。如果您开始单独选择loc_id
或desr
,它也会引发错误。
结构数组中的字段名称似乎也是862
和动画
,而不是您感兴趣的字段
您可以单独下载parquet-tools
实用程序来检查文件数据并在没有Spark的情况下打印文件模式。在那里开始调试…
如果您没有为Spark阅读器提供架构,那么该信息已经从文件本身中隐藏,因为Parquet文件包含该信息(在文件的页脚中,而不是页眉中)