Hau*_*low 8 schema dataframe apache-spark pyspark azure-databricks
在PySpark中,您可以定义一个架构并使用此预定义的架构读取数据源,例如:
Schema = StructType([ StructField("temperature", DoubleType(), True),
StructField("temperature_unit", StringType(), True),
StructField("humidity", DoubleType(), True),
StructField("humidity_unit", StringType(), True),
StructField("pressure", DoubleType(), True),
StructField("pressure_unit", StringType(), True)
])
Run Code Online (Sandbox Code Playgroud)
对于某些数据源,可以从数据源推断模式并使用此模式定义获取数据框。
是否可以从以前推断过数据的数据帧中获取模式定义(采用上述形式)?
df.printSchema()
将模式打印为树,但是我需要重用该模式(如上定义),因此我可以读取以前从另一个数据源推断出的具有该模式的数据源。
Bor*_*ris 12
如果您正在从 PySpark 查找 DDL 字符串:
df: DataFrame = spark.read.load('LOCATION')
schema_json = df.schema.json()
ddl = spark.sparkContext._jvm.org.apache.spark.sql.types.DataType.fromJson(schema_json).toDDL()
Run Code Online (Sandbox Code Playgroud)
小智 9
对的,这是可能的。使用DataFrame.schema
property
schema
以pyspark.sql.types.StructType的形式返回此DataFrame的架构。
Run Code Online (Sandbox Code Playgroud)>>> df.schema StructType(List(StructField(age,IntegerType,true),StructField(name,StringType,true)))
1.3版的新功能。
架构也可以导出为JSON,并在需要时导入回来。
您可以为现有的 Dataframe 重用架构
l = [('Ankita',25,'F'),('Jalfaizy',22,'M'),('saurabh',20,'M'),('Bala',26,None)]
people_rdd=spark.sparkContext.parallelize(l)
schemaPeople = people_rdd.toDF(['name','age','gender'])
schemaPeople.show()
+--------+---+------+
| name|age|gender|
+--------+---+------+
| Ankita| 25| F|
|Jalfaizy| 22| M|
| saurabh| 20| M|
| Bala| 26| null|
+--------+---+------+
spark.createDataFrame(people_rdd,schemaPeople.schema).show()
+--------+---+------+
| name|age|gender|
+--------+---+------+
| Ankita| 25| F|
|Jalfaizy| 22| M|
| saurabh| 20| M|
| Bala| 26| null|
+--------+---+------+
Run Code Online (Sandbox Code Playgroud)
只需使用 df.schema 即可获取数据框的底层架构
schemaPeople.schema
StructType(List(StructField(name,StringType,true),StructField(age,LongType,true),StructField(gender,StringType,true)))
Run Code Online (Sandbox Code Playgroud)
下面的代码将为您提供已知数据帧的格式良好的表格模式定义。当您有非常多的列并且编辑很麻烦时,这非常有用。然后,您现在可以将其应用于新的数据框并手动编辑您可能想要的任何列。
from pyspark.sql.types import StructType
schema = [i for i in df.schema]
Run Code Online (Sandbox Code Playgroud)
然后从这里开始,您有了新的架构:
NewSchema = StructType(schema)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6794 次 |
最近记录: |