#pyspark #rdd
#pyspark #rdd
Вопрос:
Учитывая схему StructType, я хочу иметь возможность определять
def foo(row: schema)
return row.field
и пусть PyCharm распознает поля row, но PyCharm не распознает ‘schema’ как тип. Встраивание не имеет значения. (Я использую Python 3.8)
Ответ №1:
Я полагаю, вы хотели указать подсказку типа как StructType
?
from pyspark.sql.types import StructType
def foo(row: StructType):
return row.field
Комментарии:
1. Это общий StructType; он не знает, есть ли у него «поле».
Ответ №2:
Это технически неверно; строка — это строка, но она отлично работает благодаря duck typing:
from dataclasses import dataclass
@dataclass
class HintedRow:
x: int
y: str
def foo(row: HintedRow):
return row.x
df.rdd.map(foo)
Теперь вы можете использовать ее в модульных тестах, подобных so, и pyspark не будет жаловаться, потому что свойства HintedRow совпадают со свойствами строки:
test_row = HintedRow(x=1, y='bar')
assert foo(test_row) == 1