我正试图使用pyspark.pandas.read_table
将Databricks上的表读取到DataFrame,并收到以下错误:
AnalysisException: [UC_COMMAND_NOT_SUPPORTED] AttachDistributedSequence is not supported in Unity Catalog.;
AttachDistributedSequence[__index_level_0__#767L, _c0#734, carat#735, cut#736, color#737, clarity#738, depth#739, table#740, price#741, x#742, y#743, z#744] Index: __index_level_0__#767L
+- SubqueryAlias spark_catalog.default.diamonds
+- Relation hive_metastore.default.diamonds[_c0#734,carat#735,cut#736,color#737,clarity#738,depth#739,table#740,price#741,x#742,y#743,z#744] csv
该表是根据Databricks快速入门笔记本创建的:
DROP TABLE IF EXISTS diamonds;
CREATE TABLE diamonds
USING csv
OPTIONS (path "/databricks-datasets/Rdatasets/data-001/csv/ggplot2/diamonds.csv", header "true")
我正试着用读取表格
import pyspark.pandas as ps
psdf = ps.read_table("hive_metastore.default.diamonds")
并得到上面的错误。
将表读入spark.sql.DataFrame
与配合使用效果良好
df = spark.read.table("hive_metastore.default.diamonds")
集群版本为
Databricks Runtime Version 11.2
Apache Spark 3.3.0
Scala 2.12
我对熊猫已经很熟悉了,我想使用pyspark.pandas.DataFrame
,因为我认为它会有一个熟悉的API,而且我学习和使用起来很快。
我有以下问题:
- 这个错误是什么意思
- 我能做些什么来读取
pyspark.pandas.DataFrame
的表格 - 或者,我应该学习
pyspark.sql.DataFrame
并使用它吗?如果是,为什么
AttachDistributedSequence
是Pandas在Spark上用于创建分布式索引的一个特殊扩展。目前,在为Unity Catalog启用的共享集群上不支持它,因为在这些集群上启用的操作集受到限制。解决方法有:
- 使用启用了Unity目录的单用户集群
- 使用Spark API读取表,然后使用
pandas_api
函数(doc(在Spark DataFrame上转换为Pandas。(在Spark 3.2.x/3.3.x中,它被称为to_pandas_on_spark
(doc((:
pdf = spark.read.table("abc").pandas_api()
附言:不建议使用.toPandas
,因为它会将所有数据拉到驱动程序节点。