diff --git a/python/pyspark/sql/connect/dataframe.py b/python/pyspark/sql/connect/dataframe.py index 15aa028b11b1..9118644662d1 100644 --- a/python/pyspark/sql/connect/dataframe.py +++ b/python/pyspark/sql/connect/dataframe.py @@ -122,6 +122,18 @@ def withPlan(cls, plan: plan.LogicalPlan, session: "RemoteSparkSession") -> "Dat new_frame._plan = plan return new_frame + def isEmpty(self) -> bool: + """Returns ``True`` if this :class:`DataFrame` is empty. + + .. versionadded:: 3.4.0 + + Returns + ------- + bool + Whether it's empty DataFrame or not. + """ + return len(self.take(1)) == 0 + def select(self, *cols: "ExpressionOrString") -> "DataFrame": return DataFrame.withPlan(plan.Project(self._plan, *cols), session=self._session) diff --git a/python/pyspark/sql/tests/connect/test_connect_basic.py b/python/pyspark/sql/tests/connect/test_connect_basic.py index 9e7a5f2f4a54..3493bef1b558 100644 --- a/python/pyspark/sql/tests/connect/test_connect_basic.py +++ b/python/pyspark/sql/tests/connect/test_connect_basic.py @@ -319,6 +319,11 @@ def test_empty_dataset(self): self.assertEqual(1, len(pdf.columns)) # one column self.assertEqual("X", pdf.columns[0]) + def test_is_empty(self): + # SPARK-41212: Test is empty + self.assertFalse(self.connect.sql("SELECT 1 AS X").isEmpty()) + self.assertTrue(self.connect.sql("SELECT 1 AS X LIMIT 0").isEmpty()) + def test_session(self): self.assertEqual(self.connect, self.connect.sql("SELECT 1").sparkSession())