我想要的-是将列名映射到键中。 例如:
#+-------+----------+
#|key1 |key2 |
#+-------+----------+
#|value1 |value2 |
#|value3 |value4 |
#+-------+----------+
将被转换为
#+-------+----------+
#| keys|values |
#+-------+----------+
#|key1 |value1 |
#|key1 |value2 |
#|key2 |value3 |
#|key2 |value4 |
#+-------+----------+
在HiveQL中,我可以写类似于
select distinct key, velue
from xxx
lateral view explode(map(
'key1', key1,
'key2', key2) tab as key, value
但是如何在pyspark上写它。 我可以使用createtemptable,但我认为这不是最佳解决方案/
答案 0 :(得分:2)
使用create_map
函数创建一个Map列,然后将其爆炸。
tick
需要一组分组的列表达式
作为键值对。可以使用DataFrame列上的内容来创建这样的列表:
private Firebase_Database DbOnline;
ArrayList<ClassModel> clsList;
clsList = DbOnline.getClassesList();//return arraylist containing objects ...
//Implementation of getClassesList() in Firebase_Database CLASS..
public ArrayList<ClassModel> getClassesList(){//upto to this every thing execute but from here the //execution jumps to if(condition) line below...and I get null arraylist in return
FbDb.child("Classes").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for(DataSnapshot ds: dataSnapshot.getChildren())
{
ClassModel classModel = ds.getValue(ClassModel.class);
classModels.add(classModel);
Log.i("Tag", "Msg");
}
Log.i("Tag", String.valueOf(classModels.size()));
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
if (classModels==null){
Log.i("TAG","Null NO DATA IN DATABASE");
}
return classModels;
}
答案 1 :(得分:1)
类似的东西?
select 'key1' as keys,
key1 as values
from xxx
union all
select 'key2' as keys,
key2 as values
from xxx
投入spark.sql()
。