从 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 格式存储所有内容。
我在 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 格式存储所有内容。