Как вы возвращаете строку в фрейм данных - PullRequest
0 голосов
/ 22 июня 2019

Предполагалось, что это будет простой тест для перемещения первой строки моего информационного кадра в новый информационный кадр.

первый выпуск df.first () возвращает «строку», а не фрейм данных. Следующая проблема, когда я пытаюсь использовать spark.createDataFrame (df.first ()), он скажет вам, что не может вывести схему.

следующая проблема. Spark.createDataFrame (df.first (), df.schema) не работает.

так для исходной схемы ниже:

root
 |-- entity_name: string (nullable = true)
 |-- field_name: array (nullable = true)
 |    |-- element: string (containsNull = true)
 |-- data_row: array (nullable = true)
 |    |-- element: string (containsNull = true)
 |-- data_schema: array (nullable = true)
 |    |-- element: string (containsNull = true)

Я определил схему в коде так:

xyz_schema = StructType([
 StructField('entity_name',StringType(),True)
 ,StructField('field_name',ArrayType(StringType(),True),True)
 ,StructField('data_row',ArrayType(StringType(),True),True)
 ,StructField('data_schema',ArrayType(StringType(),True),True)
])

print(xyz.first())
xyz_1stRow = spark.createDataFrame(xyz.first(), xyz_schema)

Выше не работает! Я получаю следующую ошибку:

"TypeError: StructType can not accept object 'parquet/assignment/v1' in type <class 'str'>"

это то, что напечатано в печати ...

Строка (ENTITY_NAME = 'паркет / назначение / v1', field_name = ['Contract_ItemNumber', 'UPC', 'DC_ID', 'AssignDate', «AssignID», «AssignmentQuantity», «ContractNumber», «MaterialNumber», 'OrderReason', 'RequirementCategory', 'MSKU'], data_row = ['\ n
350,192660436296,2001,10 / 1 / 2019,84009248020191000,5,840092480,1862291010,711, V1 \ п \ т \ т \ т \ т \ т», «\ П
180,191454773838,2001,10 / 1 / 2019,84009248020191000,6,840092480,1791301010,711, V1 \ п \ т \ т \ т \ т \ т '], data_schema = ['StringType', 'StringType', 'StringType', None, 'StringType', 'IntegerType', 'StringType', 'StringType', 'StringType', 'StringType', 'StringType'])

Что я делаю не так? почему stringtype не принимает строку?

Я работаю в pyspark (текущая версия) с базами данных Azure. Я бы предпочел остаться с pyspark, а не с R, а не с Scala, и не должен был бы конвертировать в панд и рисковать, если мои данные будут испорчены при конвертации между всеми этими языками.

1 Ответ

1 голос
/ 22 июня 2019

Согласно документации, функция createDataFrame принимает RDD, список или pandas.DataFrame и создает из него фрейм данных. Поэтому вы должны поместить результат df.first в скобки, чтобы сделать его списком. Посмотрите на пример ниже:

df = spark.createDataFrame(
    [('Galaxy', 2017, 27841, 17529),
     ('Galaxy', 2017, 29395, 11892),
     ('Novato', 2018, 35644, 22876),
     ('Novato', 2018, 8765,  54817)],
    ['model','year','price','mileage']
)

bla = spark.createDataFrame([df.first()])
bla.show()

Выход:

+------+----+-----+-------+ 
| model|year|price|mileage| 
+------+----+-----+-------+ 
|Galaxy|2017|27841|  17529| 
+------+----+-----+-------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...