aboutsummaryrefslogtreecommitdiff
path: root/python
diff options
context:
space:
mode:
Diffstat (limited to 'python')
-rw-r--r--python/pyspark/sql/tests.py15
-rw-r--r--python/pyspark/sql/types.py5
2 files changed, 20 insertions, 0 deletions
diff --git a/python/pyspark/sql/tests.py b/python/pyspark/sql/tests.py
index 1e3444dd9e..38c83c427a 100644
--- a/python/pyspark/sql/tests.py
+++ b/python/pyspark/sql/tests.py
@@ -179,6 +179,21 @@ class SQLTests(ReusedPySparkTestCase):
ReusedPySparkTestCase.tearDownClass()
shutil.rmtree(cls.tempdir.name, ignore_errors=True)
+ def test_row_should_be_read_only(self):
+ row = Row(a=1, b=2)
+ self.assertEqual(1, row.a)
+
+ def foo():
+ row.a = 3
+ self.assertRaises(Exception, foo)
+
+ row2 = self.sqlCtx.range(10).first()
+ self.assertEqual(0, row2.id)
+
+ def foo2():
+ row2.id = 2
+ self.assertRaises(Exception, foo2)
+
def test_range(self):
self.assertEqual(self.sqlCtx.range(1, 1).count(), 0)
self.assertEqual(self.sqlCtx.range(1, 0, -1).count(), 1)
diff --git a/python/pyspark/sql/types.py b/python/pyspark/sql/types.py
index e2e6f03ae9..c083bf8990 100644
--- a/python/pyspark/sql/types.py
+++ b/python/pyspark/sql/types.py
@@ -1246,6 +1246,11 @@ class Row(tuple):
except ValueError:
raise AttributeError(item)
+ def __setattr__(self, key, value):
+ if key != '__fields__':
+ raise Exception("Row is read-only")
+ self.__dict__[key] = value
+
def __reduce__(self):
"""Returns a tuple so Python knows how to pickle Row."""
if hasattr(self, "__fields__"):