Skip to content

Commit 867754a

Browse files
author
Davies Liu
committed
support non-ascii character in column names
1 parent 31b4a3d commit 867754a

File tree

3 files changed

+13
-3
lines changed

3 files changed

+13
-3
lines changed

python/pyspark/sql/tests.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -628,6 +628,14 @@ def test_access_column(self):
628628
self.assertRaises(IndexError, lambda: df["bad_key"])
629629
self.assertRaises(TypeError, lambda: df[{}])
630630

631+
def test_column_name_with_non_ascii(self):
632+
df = self.sqlCtx.createDataFrame([(1,)], ["数量"])
633+
self.assertEqual(StructType([StructField("数量", LongType(), True)]), df.schema)
634+
self.assertEqual("DataFrame[数量: bigint]", str(df))
635+
self.assertEqual([("数量", 'bigint')], df.dtypes)
636+
self.assertEqual(1, df.select("数量").first()[0])
637+
self.assertEqual(1, df.select(df["数量"]).first()[0])
638+
631639
def test_access_nested_types(self):
632640
df = self.sc.parallelize([Row(l=[1], r=Row(a=1, b="b"), d={"k": "v"})]).toDF()
633641
self.assertEqual(1, df.select(df.l[0]).first()[0])

python/pyspark/sql/types.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -324,6 +324,8 @@ def __init__(self, name, dataType, nullable=True, metadata=None):
324324
False
325325
"""
326326
assert isinstance(dataType, DataType), "dataType should be DataType"
327+
if not isinstance(name, str):
328+
name = name.encode('utf-8')
327329
self.name = name
328330
self.dataType = dataType
329331
self.nullable = nullable

python/pyspark/sql/utils.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,9 @@ def deco(*a, **kw):
2929
try:
3030
return f(*a, **kw)
3131
except py4j.protocol.Py4JJavaError as e:
32-
cls, msg = e.java_exception.toString().split(': ', 1)
33-
if cls == 'org.apache.spark.sql.AnalysisException':
34-
raise AnalysisException(msg)
32+
s = e.java_exception.toString()
33+
if s.startswith('org.apache.spark.sql.AnalysisException: '):
34+
raise AnalysisException(s.split(': ', 1)[1])
3535
raise
3636
return deco
3737

0 commit comments

Comments
 (0)