从 Ignite 2.8(作为数据库)加载数据时编码错误的 Spark 数据帧

Bad encoding Spark dataframe when load data from Ignite 2.8 (as database)

我在 Windows 10

上使用 Spark 2.4 和 Ignite 2.8

当我将 pyspark dataframe 放入 ignite 时 table 它保存得很好。

但是,当我将此数据从 Ignite 读回 Pyspark 时,数据帧又回到了系统默认编码 (CP1251)。我不明白如何通过正确的编码返回正确的数据。

这是示例代码:

import pandas as pd
import pyspark
import os

# Starting local SPARK
os.environ['PYSPARK_SUBMIT_ARGS'] = " --driver-memory 18g --executor-memory 20g --jars ///C:/Ignite/libs/*.jar,///C:/Ignite/libs/optional/ignite-spark-2.4/*.jar,///C:/Ignite/libs/ignite-spring/*.jar,///C:/Ignite/libs/ignite-indexing/*.jar pyspark-shell"
conf = pyspark.SparkConf().setAppName('testIgnite').setMaster('local[2]')
sc = pyspark.SparkContext.getOrCreate(conf=conf)
sqlContext = pyspark.SQLContext(sc)
configFile = "c:/ignite/examples/config/my-data-regions.xml"

# Create test pandas dataframe
ndf=pd.DataFrame([[0,'Тест1'],
                  [1,'Другой Тест2']
                 ], columns=['c1','c2'])

# Create spark dataframe from pandas df
sdf=sqlContext.createDataFrame(ndf)
sdf.show() #Output 2

# save data to Ignite
sdf.write\
.format("ignite")\
.option("table",'TEST_TABLE_2')\
.option("primaryKeyFields", 'c1')\
.option("config",configFile)\
.mode("overwrite")\
.save()

# load data from Ignite
idf=sqlContext.read.format("ignite")\
.option("table",'TEST_TABLE_2')\
.option("config",configFile)\
.load()

idf.show() #Output 2

#stop Spark
sc.stop()

此输出#1 - 好!

+---+------------+
| c1|          c2|
+---+------------+
|  0|       Тест1|
|  1|Другой Тест2|
+---+------------+

此输出#2 - 错误编码:(

+--------------------+---+
|                  C2| C1|
+--------------------+---+
|           Тест1|  0|
|Другой Те...|  1|
+--------------------+---+

我建议使用 -Dfile.encoding=UTF-8 JVM 参数以 UTF-8 格式存储所有内容。