RuntimeError:转换为Arrow:VectorUDT的类型不受支持

时间:2018-07-04 14:00:00

标签: pandas apache-spark dataframe pyspark pyarrow

我想将一个大Spark数据框转换为具有1000000行以上的Pandas。我尝试使用以下代码将Spark数据框架转换为Pandas数据框架:

local _lastTime = 0
local function OnEnterFrame( event )
    deltaTime = event.time - _lastTime
    _lastTime = event.time
    MoveMyPlatformOnEnterFrame(deltaTime)
end

Runtime:addEventListener( "enterFrame", OnEnterFrame )

但是,我得到了错误:

local _loopTime  = someValue
local _xRadians =0
local _amplitude = someOtherValue
local _platform --this is the Display Object I want to move
function MoveMyPlatformOnEnterFrame( deltaTime )
    delta = deltaTime / _loopTime * (44/7)
    _xRadians = _xRadians + delta
    _xRadians = math.fmod( _xRadians, (44/7) )
    _platform.x = _position.x + math.sin( _xRadians ) * _amplitude
end

它不起作用,但是如果我将arrow设置为false,它会起作用。但这太慢了...知道吗?

1 个答案:

答案 0 :(得分:1)

箭头仅支持少量类型,Spark ApplicationRef(包括UserDefinedTypesml mllib不在受支持的类型中)。

如果您要使用箭头集会,则必须将数据转换为支持的格式。一种可能的解决方案是将VectorUDTs扩展为列-How to split Vector into columns - using PySpark

您还可以使用Vectors方法序列化输出:

to_json

但是,如果数据足够大,足以from pyspark.sql.functions import to_json df.withColumn("your_vector_column", to_json("your_vector_column")) 成为瓶颈,那么我将重新考虑收集这样的数据。