我正在Databricks的社区版本中使用Pyspark,使用Python 2.7和Spark 2.2.1。我有一个Pyspark数据框“top100m”:
In: type(movie_ratings_top100m)
Out: pyspark.sql.dataframe.DataFrame
其中有3个数字类型列:
In: top100m.printSchema()
Out: root
|-- userId: long (nullable = true)
|-- itemId: long (nullable = true)
|-- userPref: double (nullable = true)
In: top100m.show(6)
Out:
+------+-------+--------+
|userId| itemId|userPref|
+------+-------+--------+
| 243| 10| 3.5|
| 243| 34| 3.5|
| 243| 47| 4.0|
| 243| 110| 4.0|
| 243| 150| 2.5|
| 243| 153| 2.0|
+------+-------+--------+
数据帧中没有字符串。尝试使用以下代码行将此文件输出为csv或txt文件时(基于找到的Datatricks文档
here
):
dbutils.fs.put("/FileStore/mylocation/top100m.csv", top100m)
dbutils.fs.put("/FileStore/mylocation/top100m.txt", top100m)
我得到以下错误:
TypeError: DataFrame[userId: bigint, itemId: bigint, userPref: double] has the wrong type - (<type 'basestring'>,) is expected.
我对Python 2中存在的basestring超类型有一个粗略的理解,它在Python 3中被放弃了,我认为这与这里无关,但我可能错了。我的最终目标是能够将Pyspark数据帧从Databricks导出到本地机器上。我的问题是,为什么Spark/Databricks在这种情况下会期望使用基串类型,以及我可以如何处理数据以使其符合要求。
在审查Databricks文档后,包括
forums
,似乎没有一种非常简单的方法将数据传输到本地机器(我没有连接到S3存储桶)。最简单的方法似乎是我上面提到的方法,它给了我错误。如果有更好的方法来实现这一点,那将非常有用。