Плохое кодирование Spark dataframe при загрузке данных из Ignite 2.8 (в качестве базы данных) - PullRequest
0 голосов
/ 08 апреля 2020

Я использую Spark 2.4 и Ignite 2.8 на Windows 10

Когда я помещаю фрейм данных pyspark, чтобы зажечь таблицу, он хорошо сохраняется.

Но, когда я читаю эти данные обратно из 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|
+--------------------+---+

1 Ответ

1 голос
/ 09 апреля 2020

Я рекомендую хранить все в UTF-8, используя параметр -Dfile.encoding = UTF-8 JVM.

...