首页 > 解决方案 > TypeError: ufunc 循环不支持十进制类型的参数 0。十进制没有可调用的 arccos 方法

问题描述

我正在尝试将 Pyspark 数据框转换为 pandas 数据框。

同时计算长,纬度值并将它们更新到数据帧中。

def cos_max_longitude(radian_longitude, radian_latitude):
    return radian_longitude + np.arcsin(np.sin(r) / np.arccos(radian_latitude))

错误堆栈:

Traceback (most recent call last):
  File "/usr/local/src/spark/python/lib/pyspark.zip/pyspark/worker.py", line 377, in main
    process()
  File "/usr/local/src/spark/python/lib/pyspark.zip/pyspark/worker.py", line 372, in process
    serializer.dump_stream(func(split_index, iterator), outfile)
  File "/usr/local/src/spark/python/lib/pyspark.zip/pyspark/serializers.py", line 345, in dump_stream
    self.serializer.dump_stream(self._batched(iterator), stream)
  File "/usr/local/src/spark/python/lib/pyspark.zip/pyspark/serializers.py", line 141, in dump_stream
    for obj in iterator:
  File "/usr/local/src/spark/python/lib/pyspark.zip/pyspark/serializers.py", line 334, in _batched
    for item in iterator:
  File "<string>", line 1, in <lambda>
  File "/usr/local/src/spark/python/lib/pyspark.zip/pyspark/worker.py", line 85, in <lambda>
    return lambda *a: f(*a)
  File "/usr/local/src/spark/python/lib/pyspark.zip/pyspark/util.py", line 99, in wrapper
    return f(*args, **kwargs)
  File "/home/ec2-user/test.py", line 1847, in cos_max_longitude
    np.arcsin(np.sin(r) / np.arccos(radian_latitude))
TypeError: loop of ufunc does not support argument 0 of type decimal.Decimal which has no callable arccos method

标签: pandaspysparkpython-3.7

解决方案


基本上错误在 np.arccos(radian_latitude)

我的建议是检查 radian_latitude 的数据类型,同时检查其中存储的值的数据类型

如果它的 'decimal.Decimal' 则将其转换为简单的浮点数据类型。

请参阅以下链接:

https://docs.python.org/3/library/decimal.html https://docs.scipy.org/doc/numpy/reference/ufuncs.html#optional-keyword-arguments https://docs.scipy。 org/doc/numpy/reference/generated/numpy.arccos.html


推荐阅读