我必须从 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
但是我没有查看结构类型的任何方法。
scala中有struct类型的toDDL
方法,python没有。
这是我已经获得帮助的上述问题的扩展,但是我想创建一个新线程 - Get dataframe schema load to metadata table
感谢回复,我正在更新完整代码-
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)
关于apache-spark - 从 pyspark 数据框中的结构类型获取字段值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56840198/