Получить значения полей из structtype в фрейме данных pyspark - PullRequest
0 голосов
/ 01 июля 2019

Мне нужно получить схему из 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 есть 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|
+-------+--------+

1 Ответ

1 голос
/ 01 июля 2019

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...