docs: def execute(self, input_data):
          """This worker puts the output of pe_features into a dictionary of dataframes"""
          if 'sample' in input_data:
              print 'Warning: PEFeaturesDF is supposed to be called on a sample_set'
              self.samples.append(input_data['sample']['md5'])
          else:
              self.samples = input_data['sample_set']['md5_list']
  
          # Make a sample set
          sample_set = self.workbench.store_sample_set(self.samples)
  
          # Dense Features               
          dense_features = self.workbench.set_work_request('pe_features', sample_set, ['md5', 'tags', 'dense_features'])
  
          # Fixme: There's probably a nicer/better way to do this
          flat_features = []
          for feat in dense_features:
              feat['dense_features'].update({'md5': feat['md5'], 'tags': feat['tags']})
              flat_features.append(feat['dense_features'])
          dense_df = pd.DataFrame(flat_features)
          df_packed = dense_df.to_msgpack()
          dense_df_md5 = self.workbench.store_sample(df_packed, 'pe_features_dense_df', 'dataframe')
          
          # Sparse Features
          sparse_features = self.workbench.set_work_request('pe_features', sample_set, ['md5', 'tags', 'sparse_features'])
  
          # Fixme: There's probably a nicer/better way to do this
          flat_features = []
          for feat in sparse_features:
              feat['sparse_features'].update({'md5': feat['md5'], 'tags': feat['tags']})
              flat_features.append(feat['sparse_features'])
          sparse_df = pd.DataFrame(flat_features)
          df_packed = sparse_df.to_msgpack()
          sparse_df_md5 = self.workbench.store_sample(df_packed, 'pe_features_sparse_df', 'dataframe')
  
          # Return the dataframes
          return {'dense_features': dense_df_md5, 'sparse_features': sparse_df_md5}