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

Я получаю потоковые данные от Кафки.По умолчанию dataframe.value имеет тип "string".например, dataframe.value:

1.0,2.0,4,'a'
1.1,2.1,3,'a1'

Схема dataframe.value:

root
 |-- value: string (nullable = true)

Теперь я хочу определить схему для этого фрейма данных.Схема, которую я хочу получить на выходе:

root
 |-- c1: double (nullable = true) 
 |-- c2: double (nullable = true)
 |-- c3: integer (nullable = true)
 |-- c4: string (nullable = true)  

Я определяю схему и затем загружаю данные из kafka, но я получаю ошибку «Кафка уже определила схему, не может применить настроенную схему».

Любая помощь по этому вопросу будет принята с благодарностью.

1 Ответ

0 голосов
/ 18 мая 2018

Вы можете определить схему при преобразовании во фрейм данных.

from pyspark.sql.types import StringType, IntegerType, DoubleType
kafkaRdd = sc.parallelize([(1.0,2.0,4,'a'), (1.1,2.1,3,'a1')])
col_types = [DoubleType(), DoubleType(), IntegerType(), StringType()]
col_names = ["c1", "c2", "c3", "c4"]
df = kafkaRdd.toDF(col_names, col_types)
df.show()
df.printSchema()

Вот вывод:

+---+---+---+---+
| c1| c2| c3| c4|
+---+---+---+---+
|1.0|2.0|  4|  a|
|1.1|2.1|  3| a1|
+---+---+---+---+

root
 |-- c1: double (nullable = true)
 |-- c2: double (nullable = true)
 |-- c3: long (nullable = true)
 |-- c4: string (nullable = true)
...