1

DataFrame x があります。ID と日付が含まれます。そう

head(x)

ID = 1 2 ... および Date = "2012-05-05" "2015-01-01" ... を与える

「2013-01-01」+ P より後の日付を持つすべての ID が削除された新しいデータセットを作成したいと考えています。P は日です。たとえば、P = 3 日です。

sparkRではこれを行います

newdata <- filter(x, x$Date < as.Date(2013-01-01 + P) )

しかし、sparkR はこれを受け入れません。

4

2 に答える 2

3

「sparkR はこれを受け入れない」と言うときは、詳しく説明する必要があります。エラーはありますか?エラーは何ですか?または、コードはエラーなしで実行されますが、目的の結果が得られませんか? この場合、それは何を与えますか?

かなり些細な構文エラーがいくつかあります。

  • 使用subsetしないでfilterください。ヒント:?filterこの関数は「単変量時系列に線形フィルタリングを適用する」ことを示しています。ここで、「フィルタリング」とは「サブセット」という意味ではなく、「畳み込み」という意味でのフィルターを意味します。
  • の場合as.Date、日付は引用符で囲む必要があります。P日付コンストラクター内ではなく、日付に を追加します。ヒントとして:

    as.Date(2013-01-01)
    Error in as.Date.numeric(2013 - 1 - 1) : 'origin' must be supplied
    

    これは「2013 - 1 - 1」、つまり数値2011を変換しようとしていることに注意してください。またas.Date.numeric、文字列「2013-01-01」を指定する必要があることを示しています。これを試すと、次のように動作します。

    as.Date("2013-01-01")
    # [1] "2013-01-01"
    

    次に、 3 と を追加しますsubset。余談ですが、 in before を指定するsubset必要はありません( を参照):x$Date?subset

    subset(x, Date < as.Date("2013-01-01") + 3)
    

話の教訓: 質問をするときに受け取ったすべてのエラーを投稿し、コードを少しずつ試してみてください (コードの行全体が機能しない場合は、問題を解決できるように、機能する最小のビットに分解してみてください)一つずつ)。

于 2015-08-03T11:16:58.703 に答える
2

@mathematical.coffee で提案されているように、P を as.Date の外に置く必要がありますが、彼の言うことに反して、SparkR ではフィルターを使用する必要があるため、次のコードが機能します。

# Create x and set it to a data
x2 <- data.frame(ID=c(1,2),
                 Date=c("2012-05-05","2015-01-01"))
x2$Date <- as.Date(x2$Date)
x <- createDataFrame(sqlContext,x2)

# set P and compare the dates
P <- 2
newdata <- filter(x, x$Date < (as.Date("2013-01-01")+P) )

# See the first results (in my example only one row)
head(newdata)
于 2015-08-03T11:42:56.767 に答える