apache-spark - 从 pyspark 数据框中的结构类型获取字段值

标签 apache-spark pyspark

我必须从 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)))

我想提取值 nameage 以及 StringTypeLongType 但是我没有查看结构类型的任何方法。

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 中的值并获取 namedataType:

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/

相关文章:

spring - Java Spring Batch 中的 ETL 与 Apache Spark 基准测试

scala - Spark 流 MQTT

pyspark - 如何在数据帧的开头移动 pyspark 数据帧的特定列

python - 如何使用 "]|["分隔符读取 pyspark 中的文件

python - 用现有数据框中的一些选定的行集形成一个新的spark数据框

python - 在 Synapse 的 SQL 数据库中保存 PySpark 数据帧时出现错误 "IllegalArgumentException: KrbException: Cannot locate default realm"

apache-spark - KStreams + Spark 流 + 机器学习

scala - 将 "MM/dd/yyyy HH:mm"形式的字符串转换为 Spark 数据帧中的 joda 日期时间

apache-spark - 为什么 spark-shell 不启动 SQL 上下文?

apache-spark - Pyspark 轮函数的问题