你能从 pyspark.sql.dataframe.DataFrame 构造 pyspark.pandas.DataFrame 吗?

Can you construct pyspark.pandas.DataFrame from pyspark.sql.dataframe.DataFrame?

我是 Spark / Databricks 的新手。我的问题是是否建议/可能混合使用 sql 和 Pandas API 数据帧?是否可以创建 pyspark.pandas.DataFrame directly from a pyspark.sql.dataframe.DataFrame,或者我需要重新读取 parquet 文件?

# Suppose you have an SQL dataframe (now I read Boston Safety Data from Microsoft Open Dataset)
blob_account_name = "azureopendatastorage"
blob_container_name = "citydatacontainer"
blob_relative_path = "Safety/Release/city=Boston"
blob_sas_token = r""

wasbs_path = 'wasbs://%s@%s.blob.core.windows.net/%s' % (blob_container_name, blob_account_name, blob_relative_path)
spark.conf.set('fs.azure.sas.%s.%s.blob.core.windows.net' % (blob_container_name, blob_account_name), blob_sas_token)
print('Remote blob path: ' + wasbs_path)

df = spark.read.parquet(wasbs_path)

# Convert df to pyspark.pandas.Dataframe
df2 =   # ...?

已尝试 df.toPandas(),效果不佳,因为它会转换为普通的、未分发的 pandas.core.frame.DataFrame

解决方法是再次将镶木地板读入 pyspark.pandas.Dataframe,我尽量避免这样做。

谢谢!

IIUC 您希望将 spark 数据帧转换为 pandas on spark 数据帧。

您可以使用 to_pandas_on_spark 方法。

df2 = df.to_pandas_on_spark()

print(type(df2))

<class 'pyspark.pandas.frame.DataFrame'>