code: def crosstab(self, col1, col2):
          
          if not isinstance(col1, basestring):
              raise ValueError("col1 should be a string.")
          if not isinstance(col2, basestring):
              raise ValueError("col2 should be a string.")
          return DataFrame(self._jdf.stat().crosstab(col1, col2), self.sql_ctx)
docs: Computes a pair-wise frequency table of the given columns. Also known as a contingency
          table. The number of distinct values for each column should be less than 1e4. At most 1e6
          non-zero pair frequencies will be returned.
          The first column of each row will be the distinct values of `col1` and the column names
          will be the distinct values of `col2`. The name of the first column will be `$col1_$col2`.
          Pairs that have no occurrences will have zero as their counts.
          :func:`DataFrame.crosstab` and :func:`DataFrameStatFunctions.crosstab` are aliases.
  
          :param col1: The name of the first column. Distinct items will make the first item of
              each row.
          :param col2: The name of the second column. Distinct items will make the column names
              of the DataFrame.