Apache spark PHOENIX SPARK-加载表作为数据帧
我已经从一个HBase表(PHOENIX)创建了一个数据帧,它有5亿行。从数据框架中,我创建了一个JavaBean的RDD,并使用它与文件中的数据连接Apache spark PHOENIX SPARK-加载表作为数据帧,apache-spark,dataframe,phoenix,Apache Spark,Dataframe,Phoenix,我已经从一个HBase表(PHOENIX)创建了一个数据帧,它有5亿行。从数据框架中,我创建了一个JavaBean的RDD,并使用它与文件中的数据连接 Map<String, String> phoenixInfoMap = new HashMap<String, String>(); phoenixInfoMap.put("table", tableName); phoenixInfoMap.put("zkUrl", zkURL); DataFrame df = sql
Map<String, String> phoenixInfoMap = new HashMap<String, String>();
phoenixInfoMap.put("table", tableName);
phoenixInfoMap.put("zkUrl", zkURL);
DataFrame df = sqlContext.read().format("org.apache.phoenix.spark").options(phoenixInfoMap).load();
JavaRDD<Row> tableRows = df.toJavaRDD();
JavaPairRDD<String, AccountModel> dbData = tableRows.mapToPair(
new PairFunction<Row, String, String>()
{
@Override
public Tuple2<String, String> call(Row row) throws Exception
{
return new Tuple2<String, String>(row.getAs("ID"), row.getAs("NAME"));
}
});
Map phoenixInfoMap=newhashmap();
phoenixInfoMap.put(“表”,表名);
phoenixInfoMap.put(“zkUrl”,zkUrl);
DataFrame df=sqlContext.read().format(“org.apache.phoenix.spark”).options(phoenixInfoMap.load();
JavaRDD tableRows=df.toJavaRDD();
javapairrddbdata=tableRows.mapToPair(
新PairFunction()
{
@凌驾
公共Tuple2调用(行)引发异常
{
返回新的Tuple2(row.getAs(“ID”)、row.getAs(“NAME”);
}
});
现在我的问题是,假设该文件有200万个与表匹配的唯一条目。是将整个表作为RDD加载到内存中,还是仅将表中匹配的200万条记录作为RDD加载到内存中?您的语句
DataFrame df = sqlContext.read().format("org.apache.phoenix.spark").options(phoenixInfoMap)
.load();
将整个表加载到内存中。您还没有为phoenix提供任何过滤器,以便将其下推到hbase中,从而减少读取的行数
如果您连接到非HBase数据源(例如平面文件),则首先需要读入HBase表中的所有记录。与辅助数据源不匹配的记录将不会保存在新的数据帧中,但初始读取仍会发生
更新一种可能的方法是预处理文件,即提取您想要的id。将结果存储到新的HBase表中。然后通过Phoenix not Spark直接在HBase中执行连接
这种方法的基本原理是将计算转移到数据中。大部分数据驻留在HBase中,因此将小数据(文件中的id)移动到HBase中
我不太熟悉Phoenix,只是它在hbase之上提供了一个sql层。那么它大概能够进行这样的连接并将结果存储在一个单独的HBase表中。。?然后,可以将单独的表加载到Spark中,以便在后续计算中使用。Thank you@javadba。有没有一种有效的方法来处理这种情况?我只想从HBase table.Hi@Mohan加载文件中的200万个匹配项。请告诉我
DataFrame df=sqlContext.read().format(“org.apache.phoenix.spark”).options(phoenixInfoMap.load()
方法的构建依赖关系。我也在做同样的事情,但是得到了java.lang.NoSuchMethodError