将数据帧的架构保存在 S3 位置

Gom*_*mpu 5 amazon-s3 apache-spark pyspark databricks

我使用以下命令从 databricks 中的 S3 读取镶木地板文件

df = sqlContext.read.parquet('s3://path/to/parquet/file')
Run Code Online (Sandbox Code Playgroud)

我想读取数据帧的架构,可以使用以下命令来执行此操作:

df_schema = df.schema.json()
Run Code Online (Sandbox Code Playgroud)

但我无法将该df_schama对象写入 S3 上的文件。注意:我愿意不创建 json 文件。我只想将数据帧的架构保存到 AWS S3 中的任何文件类型(可能是文本文件)。

我尝试编写 json 模式如下,

df_schema.write.csv("s3://path/to/file")
Run Code Online (Sandbox Code Playgroud)

或者

a.write.format('json').save('s3://path/to/file')
Run Code Online (Sandbox Code Playgroud)

他们都给我以下错误:

AttributeError: 'str' object has no attribute 'write'

Shu*_*Shu 2

df.schema.json()结果string对象和string对象不会有.write方法。

In RDD Api:

df_schema = df.schema.json()
Run Code Online (Sandbox Code Playgroud)

并行化df_schema变量来创建rdd,然后使用.saveAsTextFile方法将模式写入 s3。

sc.parallelize([df_schema]).saveAsTextFile("s3://path/to/file")
Run Code Online (Sandbox Code Playgroud)

(或者)

In Dataframe Api:

from pyspark.sql import Row
df_schema = df.schema.json()
df_sch=sc.parallelize([Row(schema=df_schema)]).toDF()
df_sch.write.csv("s3://path/to/file")
df_sch.write.text("s3://path/to/file") //write as textfile
Run Code Online (Sandbox Code Playgroud)