![](/img/trans.png)
[英]PySpark How to parse and get field names from Dataframe schema's StructType Object
[英]Get field values from a structtype in pyspark dataframe
我必須從csv文件(列名和數據類型)中獲取模式。到目前為止,我已經達到了-
l = [('Alice', 1)]
Person = Row('name', 'age')
rdd = sc.parallelize(l)
person = rdd.map(lambda r: Person(*r))
df2 = spark.createDataFrame(person)
print(df2.schema)
#StructType(List(StructField(name,StringType,true),StructField(age,LongType,true)))
我想提取值name
和age
以及StringType
和LongType
但是在結構類型上看不到任何方法。
toDDL
有結構類型的toDDL
方法,但python無法使用。
這是我已經獲得幫助的上述問題的擴展,但是我想創建一個新線程-將數據框架構加載到元數據表
感謝您的答復,我正在更新完整的代碼-
import pyspark # only run after findspark.init()
from pyspark.sql import SparkSession
spark = SparkSession \
.builder \
.appName("Python Spark SQL basic example") \
.config("spark.sql.catalogImplementation", "in-memory") \
.getOrCreate()
from pyspark.sql import Row
l = [('Alice', 1)]
Person = Row('name', 'age')
rdd = sc.parallelize(l)
person = rdd.map(lambda r: Person(*r))
df2 = spark.createDataFrame(person)
df3=df2.dtypes
df1=spark.createDataFrame(df3, ['colname', 'datatype'])
df1.show()
df1.createOrReplaceTempView("test")
spark.sql('''select * from test ''').show()
產量
+-------+--------+
|colname|datatype|
+-------+--------+
| name| string|
| age| bigint|
+-------+--------+
+-------+--------+
|colname|datatype|
+-------+--------+
| name| string|
| age| bigint|
+-------+--------+
IIUC,您可以遍歷df2.schema.fields
的值並獲取name
和dataType
:
print([(x.name, x.dataType) for x in df2.schema.fields])
#[('name', StringType), ('age', LongType)]
還有dtypes
:
print(df2.dtypes)
#[('name', 'string'), ('age', 'bigint')]
並且您可能也對printSchema()
感興趣:
df2.printSchema()
#root
# |-- name: string (nullable = true)
# |-- age: long (nullable = true)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.