Pyspark Sql Тип: Union [int, float] - PullRequest
       12

Pyspark Sql Тип: Union [int, float]

0 голосов
/ 21 января 2020

Я принимаю тип данных, который обычно является int, но также может быть None или inf, и создаю с ним Spark DataFrame. Я попытался сделать его LongType, жалуется PySpark, потому что inf - это число с плавающей точкой:

  File "/opt/spark/python/lib/pyspark.zip/pyspark/worker.py", line 177, in main
    process()
  File "/opt/spark/python/lib/pyspark.zip/pyspark/worker.py", line 172, in process
    serializer.dump_stream(func(split_index, iterator), outfile)
  File "/opt/spark/python/lib/pyspark.zip/pyspark/serializers.py", line 268, in dump_stream
    vs = list(itertools.islice(iterator, batch))
  File "/opt/spark/python/pyspark/sql/session.py", line 567, in prepare
    verify_func(obj, schema)
  File "/opt/spark/python/lib/pyspark.zip/pyspark/sql/types.py", line 1355, in _verify_type
    _verify_type(obj.get(f.name), f.dataType, f.nullable)
  File "/opt/spark/python/lib/pyspark.zip/pyspark/sql/types.py", line 1329, in _verify_type
    raise TypeError("%s can not accept object %r in type %s" % (dataType, obj, type(obj)))
TypeError: LongType can not accept object inf in type <class 'float'>

Как я могу поддержать это в pyspark. sql .types?

1 Ответ

0 голосов
/ 21 января 2020

Сейчас я просто сопоставил поле с плавающей точкой и использовал DoubleType в схеме:

def convert_field(x):
    try:
        field = x.pop("fieldName")
    except KeyError:
        return x
    return dict(fieldName=float(field) if field is not None else field, **x)

results = ...
spark.createDataFrame(results.map(convert_field), results_schema).cache
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...