假设这是将我的数据框的第一行移至新数据框的简单测试。
第一期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'>"
这是印刷品向我展示的内容...
行(实体名称=“镶木地板/布置/ 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 \ n \ t \ t \ t \ t \ t \ t', '\ n
180,191454773838,2001,10 / 1 / 2019,84009248020191000,6,840092480,1791301010,711,V1 \ n \ t \ t \ t \ t \ t \ t'], data_schema = ['StringType','StringType','StringType',无, 'StringType','IntegerType','StringType','StringType','StringType', 'StringType','StringType'])
我在做什么错?为什么字符串类型不接受字符串?
我正在使用Azure数据块在pyspark(当前版本)中工作。我宁愿留在pyspark,而不是R,而不是Scala,也不必转换为熊猫,并且冒着我的数据在所有这些语言之间转换的风险。
答案 0 :(得分:1)
根据文档,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|
+------+----+-----+-------+