code: def _evil_apply_with_dataframes(self, func, preserves_cols=False):
          
          source_rdd = self._rdd()
          result_rdd = func(source_rdd)
          # By default we don't know what the columns & indexes are so we let
          # from_rdd_of_dataframes look at the first partition to determine them.
          column_idxs = None
          if preserves_cols:
              index_names = self._index_names
              # Remove indexes from the columns
              columns = self._schema_rdd.columns[len(self._index_names):]
              column_idxs = (columns, index_names)
          return self.from_rdd_of_dataframes(
              result_rdd, column_idxs=column_idxs)
docs: Convert the underlying SchmeaRDD to an RDD of DataFrames.
          apply the provide function and convert the result back.
          This is hella slow.