code: def dropna(self, how='any', thresh=None, subset=None):
          
          if how is not None and how not in ['any', 'all']:
              raise ValueError("how ('" + how + "') should be 'any' or 'all'")
  
          if subset is None:
              subset = self.columns
          elif isinstance(subset, basestring):
              subset = [subset]
          elif not isinstance(subset, (list, tuple)):
              raise ValueError("subset should be a list or tuple of column names")
  
          if thresh is None:
              thresh = len(subset) if how == 'any' else 1
  
          return DataFrame(self._jdf.na().drop(thresh, self._jseq(subset)), self.sql_ctx)
docs: Returns a new :class:`DataFrame` omitting rows with null values.
          :func:`DataFrame.dropna` and :func:`DataFrameNaFunctions.drop` are aliases of each other.
  
          :param how: 'any' or 'all'.
              If 'any', drop a row if it contains any nulls.
              If 'all', drop a row only if all its values are null.
          :param thresh: int, default None
              If specified, drop rows that have less than `thresh` non-null values.
              This overwrites the `how` parameter.
          :param subset: optional list of column names to consider.
  
          >>> df4.na.drop().show()
          +---+------+-----+
          |age|height| name|
          +---+------+-----+
          | 10|    80|Alice|
          +---+------+-----+