我正在尝试在Spark(Pyspark)中创建一个空数据框。
我使用类似于此处讨论的方法enter link description here,但它不起作用。
这是我的代码
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/Me/Desktop/spark-1.5.1-bin-hadoop2.6/python/pyspark/sql/context.py", line 404, in createDataFrame
rdd, schema = self._createFromRDD(data, schema, samplingRatio)
File "/Users/Me/Desktop/spark-1.5.1-bin-hadoop2.6/python/pyspark/sql/context.py", line 285, in _createFromRDD
struct = self._inferSchema(rdd, samplingRatio)
File "/Users/Me/Desktop/spark-1.5.1-bin-hadoop2.6/python/pyspark/sql/context.py", line 229, in _inferSchema
first = rdd.first()
File "/Users/Me/Desktop/spark-1.5.1-bin-hadoop2.6/python/pyspark/rdd.py", line 1320, in first
raise ValueError("RDD is empty")
ValueError: RDD is empty
这是错误
$.ajax({
type: 'POST',
contentType: "application/json; charset=utf-8",
url: appControllerUrl + "/SaveAppDetails",
data: {appDetails: JSON.stringify(appDetailsView.model)},
processData: true,
dataType: "json"
});
答案 0 :(得分:22)
扩展Joe Widen的answer,您实际上可以创建没有字段的架构:
schema = StructType([])
因此,当您使用该架构创建DataFrame时,您最终会得到DataFrame[]
。
>>> empty = sqlContext.createDataFrame(sc.emptyRDD(), schema)
DataFrame[]
>>> empty.schema
StructType(List())
在Scala中,如果您选择使用sqlContext.emptyDataFrame
并查看架构,则会返回StructType()
。
scala> val empty = sqlContext.emptyDataFrame
empty: org.apache.spark.sql.DataFrame = []
scala> empty.schema
res2: org.apache.spark.sql.types.StructType = StructType()
答案 1 :(得分:8)
在撰写此答案时,您似乎需要某种架构
from pyspark.sql.types import *
field = [StructField("field1", StringType(), True)]
schema = StructType(field)
sqlContext.createDataFrame(sc.emptyRDD(), schema)
答案 2 :(得分:1)
您可以只使用以下内容:
pivot_table = sparkSession.createDataFrame([("99","99")], ["col1","col2"])
答案 3 :(得分:1)
您可以在pyspark中使用以下语法创建一个空的数据框:
df = spark.createDataFrame([], ["col1", "col2", ...])
其中[]
代表col1
和col2
的空值。然后,您可以为SQL查询注册为临时视图:
**df2.createOrReplaceTempView("artist")**
答案 4 :(得分:1)
如果要基于现有的空数据框,则将简单行限制为0。 在PySpark中:
emptyDf = existingDf.limit(0)
答案 5 :(得分:0)
您可以通过加载空文件(parquet
,json
等)来执行此操作:
df = sqlContext.read.json("my_empty_file.json")
然后,当您尝试检查架构时,您会看到:
>>> df.printSchema()
root
在Scala / Java中,不传递路径也应该有效,在Python中它会引发异常。此外,如果您切换到Scala / Python,可以使用this method创建一个。
答案 6 :(得分:0)
spark.range(0).drop("id")
这将创建一个带有“ id”列且没有行的DataFrame,然后删除“ id”列,从而为您提供一个真正的空DataFrame。
答案 7 :(得分:0)
这是一种回旋但简单的方法,可以使用推断的模式创建空的Spark df
# Initialize a spark df using one row of data with the desired schema
init_sdf = spark.createDataFrame([('a_string', 0, 0)], ['name', 'index', 'seq_#'])
# remove the row. Leaves the schema
empty_sdf = init_sdf.where(col('name') == 'not_match')
empty_sdf.printSchema()
# Output
root
|-- name: string (nullable = true)
|-- index: long (nullable = true)
|-- seq_#: long (nullable = true)
答案 8 :(得分:0)
Seq.empty[String].toDF()
这将创建一个空的df。有助于测试目的和全部。 (斯卡拉火花)
答案 9 :(得分:0)
import pyspark
from pyspark.sql import SparkSession
from pyspark.sql.types import StructType,StructField, StringType
spark = SparkSession.builder.appName('SparkPractice').getOrCreate()
schema = StructType([
StructField('firstname', StringType(), True),
StructField('middlename', StringType(), True),
StructField('lastname', StringType(), True)
])
df = spark.createDataFrame(spark.sparkContext.emptyRDD(),schema)
df.printSchema()