类型错误:数组字段中的元素类别:无法合并类型 <class 'pyspark.sql.types.StringType'> 和 <class 'pyspark.sql.types.DoubleType'>

Mr.*_*mia 1 python dataframe pandas apache-spark-sql pyspark

我正在使用 Pandas 读取 csv 文件,它是一个两列数据帧,然后我试图转换为 spark 数据帧。代码如下:

from pyspark.sql import SQLContext
sqlCtx = SQLContext(sc)
sdf = sqlCtx.createDataFrame(df)
Run Code Online (Sandbox Code Playgroud)

数据框:

print(df) 
Run Code Online (Sandbox Code Playgroud)

给出了这个:

    Name    Category
0   EDSJOBLIST apply at www.edsjoblist.com  ['biotechnology', 'clinical', 'diagnostic', 'd...
1   Power Direct Marketing  ['advertising', 'analytics', 'brand positionin...
2   CHA Hollywood Medical Center, L.P.  ['general medical and surgical hospital', 'hea...
3   JING JING GOURMET   [nan]
4   TRUE LIFE KINGDOM MINISTRIES    ['religious organization']
5   fasterproms ['microsoft .net']
6   STEREO ZONE ['accessory', 'audio', 'car audio', 'chrome', ...
7   SAN FRANCISCO NEUROLOGICAL SOCIETY  [nan]
8   Fl Advisors ['comprehensive financial planning', 'financia...
9   Fortunatus LLC  ['bottle', 'bottling', 'charitable', 'dna', 'f...
10  TREADS LLC  ['retail', 'wholesaling']
Run Code Online (Sandbox Code Playgroud)

谁能帮我这个 ?

pau*_*ult 8

Spark 可能难以处理object数据类型。一个潜在的解决方法是首先将所有内容转换为字符串:

sdf = sqlCtx.createDataFrame(df.astype(str))
Run Code Online (Sandbox Code Playgroud)

这样做的一个后果是所有内容,包括nan将转换为字符串。您需要注意正确处理这些转换并将列转换为适当的类型。

例如,如果您有一列"colA"包含浮点值,您可以使用类似以下内容将字符串转换"nan"为 a null

from pyspark.sql.functions import col, when
sdf = sdf.withColumn("colA", when(col("colA") != "nan", col("colA").cast("float")))
Run Code Online (Sandbox Code Playgroud)

  • 这看起来与这个问题完全无关。您是否尝试重新启动 Spark 上下文? (2认同)