我是Spark / Scala的新手。我想在以下场景中使用Spark -
所有表都存储在HBASE中,并通过Phoenix jdbc驱动程序在Spark中访问。
查找表可以分组为主要查找表,其他主表可以决定处理输入事务表可能需要哪些其他查找表。
我在主查找表上创建一个DataFrame,识别需要加载的剩余查找表,如下所示 -
DECLARE
XMLDATA VARCHAR2(200);
P_YEAR_ID NUMBER;
USER_ID NUMBER;
ERROR_MSG NVARCHAR2(200);
BEGIN
XMLDATA := NULL;
P_YEAR_ID := NULL;
USER_ID := NULL;
PK_ADMIN.P_SAVE_ROLLUP_LPF_FAC(
XMLDATA => XMLDATA,
P_YEAR_ID => P_YEAR_ID,
USER_ID => USER_ID,
ERROR_MSG => ERROR_MSG
);
:ERROR_MSG := ERROR_MSG;
--rollback;
END;
因此tableColumns看起来像[LookUpTable1-> [Col1,Col2],LookUpTable4-> [Col11]]。
接下来,我迭代这个列表并尝试为剩余的查找表创建DataFrames并将它们存储在HashMap(Mutable)中,这里是代码 -
PROCEDURE P_SAVE_ROLLUP_LPF_FAC(xmlData IN VARCHAR2,p_year_id number,user_id
number,error_msg OUT nocopy NVARCHAR2) AS
X SYS.XMLTYPE;
NEW_BU_ID NUMBER;
BEGIN
X := sys.xmltype.createXML(xmlData);
BEGIN
//Here is the logic for processing of the XML
END;
但是在此循环之后,如果我尝试从 lookupDFs 访问数据帧,它会立即抛出Null指针异常。
但是,如果我改变Collection以存储String文字而不是DataFrame,那么我根本不会遇到任何问题。我在这里缺少什么?
如果需要任何其他信息,请告诉我,我使用的是Spark 1.6.2,Phoenix 4.4.0,HBase 1.1.x