แปลงสคีมาของ Spark DataFrame เป็น DataFrame อื่น

ฉันมี Spark DataFrame บน PySpark และฉันต้องการจัดเก็บสคีมาของมันไว้ใน Spark DataFrame อื่น

ตัวอย่างเช่น: ฉันมีตัวอย่าง DataFrame df ที่มีลักษณะดังนี้ -

+---+-------------------+
| id|                  v|
+---+-------------------+
|  0| 0.4707538108432022|
|  0|0.39170676690905415|
|  0| 0.8249512619546295|
|  0| 0.3366111661094958|
|  0| 0.8974360488327017|
+---+-------------------+

ฉันสามารถดูสคีมาของ df ได้โดยทำ -

df.printSchema()

root
 |-- id: integer (nullable = true)
 |-- v: double (nullable = false)

สิ่งที่ฉันต้องการคือ DataFrame ที่แสดงข้อมูลด้านบนของ df ในสองคอลัมน์ col_name และ dtype

ผลลัพธ์ที่คาดหวัง:

+---------+-------------------+
| col_name|              dtype|
+---------+-------------------+
|       id|            integer|
|        v|             double|
+---------+-------------------+

ฉันจะบรรลุเป้าหมายนี้ได้อย่างไร? ฉันไม่พบสิ่งใดเกี่ยวกับเรื่องนี้ ขอบคุณ.


person K. K.    schedule 23.10.2019    source แหล่งที่มา
comment
ขนาน df.dtypes   -  person pault    schedule 23.10.2019
comment
ฉันได้ผลลัพธ์ที่ต้องการโดย spark.createDataFrame(df.dtypes, [col_name, dtypes]) ขอบคุณ. คุณหมายถึงอะไรโดยขนาน?   -  person K. K.    schedule 23.10.2019


คำตอบ (1)


สิ่งที่ง่ายที่สุดคือสร้าง dataframe จาก df.dtypes:

spark.createDataFrame(df.dtypes, ["col_name", "dtype"]).show()
#+--------+------+
#|col_name| dtype|
#+--------+------+
#|      id|   int|
#|       v|double|
#+--------+------+

แต่ถ้าคุณต้องการให้คอลัมน์ dtype ดังที่แสดงใน printSchema คุณสามารถทำได้ผ่าน df.schema

spark.createDataFrame(
    [(d['name'], d['type']) for d in df.schema.jsonValue()['fields']],
    ["col_name", "dtype"]
).show()
#+--------+-------+
#|col_name|  dtype|
#+--------+-------+
#|      id|integer|
#|       v| double|
#+--------+-------+
person pault    schedule 23.10.2019