假设我们有一个DataFrame,其字符串列为col1
,数组列为col2
。我想知道在Spark操作中幕后发生了什么:
df.select('col1', explode('col2'))
似乎select将一系列Column
个对象作为输入,explode返回Column
所以类型匹配。但是explode('col2')
返回的列在逻辑上与col1
的长度不同,所以我想知道select在构造其输出DataFrame时如何知道“同步”它们。我试着查看Column课程的线索但是找不到任何东西。
答案 0 :(得分:6)
答案很简单 - 没有Column
这样的数据结构。虽然Spark SQL使用列式存储进行缓存,并且可以利用数据布局进行某些低级操作,但列只是数据和转换的描述而不是数据容器。因此explode
上的flatMap
是另一个Dataset[Row]
,因此简化了一点 public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if(convertView ==null)
{
convertView = mInflater.inflate(R.layout.onlinelist,parent,false);
holder = new ViewHolder();
holder.tv = (TextView) convertView.findViewById(R.id.textView1);
holderProfile = (ImageView) convertView.findViewById(R.id.usernameProfile);
convertView.setTag(holder);
}
else
{
holder = (ViewHolder) convertView.getTag();
}
holder.tv.setText(usersInRange.get(position));
String[] split = usersInRange.get(position).split(" ");
final String firstSubString = split[0];
AsyncHttpClient client = new AsyncHttpClient();
client.get("xxxxxxxxx.com/uploads/" + firstSubString + ".jpeg", null, new AsyncHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
final Bitmap image = BitmapFactory.decodeByteArray(responseBody, 0, responseBody.length);
holderProfile.setImageBitmap(image);
holderProfile.invalidate();
}
@Override
public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
}
});
return convertView;
}
。