我正在尝试将函数应用于pyspark中的数据集的每个组。我遇到的第一个错误是
Py4JError: An error occurred while calling o62.__getnewargs__. Trace: py4j.Py4JException: Method __getnewargs__([]) does not exist
为解决上述问题,我删除了spark函数(我有spark.range()
)。现在错误已解决,但我得到以下信息:
File "/opt/cloudera/parcels/SPARK2-2.3.0.cloudera2-1.cdh5.13.3.p0.316101/lib/spark2/python/pyspark/serializers.py", line 276, in load_stream import pyarrow as pa ImportError: No module named pyarrow
但是当我单独尝试它时,即可以工作。
df = pd.DataFrame({"a": [1, 2, 3]})
pa.Table.from_pandas(df)
pyarrow.Table
a: int64
__index_level_0__: int64
metadata
--------
{'pandas': '{"pandas_version": "0.23.0", "index_columns": ["__index_level_0__"], "columns": [{"metadata": null, "field_name": "a", "name": "a", "numpy_type": "int64", "pandas_type": "int64"}, {"metadata": null, "field_name": "__index_level_0__", "name": null, "numpy_type": "int64", "pandas_type": "int64"}], "column_indexes": [{"metadata": null, "field_name": null, "name": null, "numpy_type": "object", "pandas_type": "bytes"}]}'}
失败的示例-摘自here
import pyspark.sql.functions as F
import pandas as pd
cols = ['id', 'val']
vals = [('A', 5), ('A', 3), ('A', 7), ('B', 12), ('B', 15), ('C', 3)]
d1 = sqlContext.createDataFrame(vals, cols)
>>> @F.pandas_udf(d1.schema, F.PandasUDFType.GROUPED_MAP)
... def subtract_mean(pdf):
... return pdf.assign(v=pdf.v - pdf.v.mean())
...
>>> try1 = d1.groupby('id').apply(subtract_mean)
>>> try1.show()
如果我尝试转换为pandas数据框,则无法使用,因为它没有schema
属性。
我在这里想念什么?
答案 0 :(得分:5)
pyarrow
必须出现在每个工作程序节点上的路径上。
PYSPARK_PYTHON
(以及可选的PYTHONPATH
)与用于测试pyarrow
代码的解释器相同。pyarrow
,除了上面提到的要点之外。此外,请确保已安装的pyarrow
版本大于或等于受支持的最低版本(0.8 today)-尽管这会导致不同的异常。