Как ввести подсказку функции, которая преобразует RDD?

#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